1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 2*4882a593Smuzhiyun // Copyright (C) 2005-2017 Andes Technology Corporation 3*4882a593Smuzhiyun 4*4882a593Smuzhiyun #ifndef _ASMNDS32_SIGCONTEXT_H 5*4882a593Smuzhiyun #define _ASMNDS32_SIGCONTEXT_H 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun /* 8*4882a593Smuzhiyun * Signal context structure - contains all info to do with the state 9*4882a593Smuzhiyun * before the signal handler was invoked. Note: only add new entries 10*4882a593Smuzhiyun * to the end of the structure. 11*4882a593Smuzhiyun */ 12*4882a593Smuzhiyun struct fpu_struct { 13*4882a593Smuzhiyun unsigned long long fd_regs[32]; 14*4882a593Smuzhiyun unsigned long fpcsr; 15*4882a593Smuzhiyun /* 16*4882a593Smuzhiyun * When CONFIG_SUPPORT_DENORMAL_ARITHMETIC is defined, kernel prevents 17*4882a593Smuzhiyun * hardware from treating the denormalized output as an underflow case 18*4882a593Smuzhiyun * and rounding it to a normal number. Hence kernel enables the UDF and 19*4882a593Smuzhiyun * IEX trap in the fpcsr register to step in the calculation. 20*4882a593Smuzhiyun * However, the UDF and IEX trap enable bit in $fpcsr also lose 21*4882a593Smuzhiyun * their use. 22*4882a593Smuzhiyun * 23*4882a593Smuzhiyun * UDF_IEX_trap replaces the feature of UDF and IEX trap enable bit in 24*4882a593Smuzhiyun * $fpcsr to control the trap of underflow and inexact. The bit filed 25*4882a593Smuzhiyun * of UDF_IEX_trap is the same as $fpcsr, 10th bit is used to enable UDF 26*4882a593Smuzhiyun * exception trapping and 11th bit is used to enable IEX exception 27*4882a593Smuzhiyun * trapping. 28*4882a593Smuzhiyun * 29*4882a593Smuzhiyun * UDF_IEX_trap is only modified through fp_udfiex_crtl syscall. 30*4882a593Smuzhiyun * Therefore, UDF_IEX_trap needn't be saved and restored in each 31*4882a593Smuzhiyun * context switch. 32*4882a593Smuzhiyun */ 33*4882a593Smuzhiyun unsigned long UDF_IEX_trap; 34*4882a593Smuzhiyun }; 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun struct zol_struct { 37*4882a593Smuzhiyun unsigned long nds32_lc; /* $LC */ 38*4882a593Smuzhiyun unsigned long nds32_le; /* $LE */ 39*4882a593Smuzhiyun unsigned long nds32_lb; /* $LB */ 40*4882a593Smuzhiyun }; 41*4882a593Smuzhiyun 42*4882a593Smuzhiyun struct sigcontext { 43*4882a593Smuzhiyun unsigned long trap_no; 44*4882a593Smuzhiyun unsigned long error_code; 45*4882a593Smuzhiyun unsigned long oldmask; 46*4882a593Smuzhiyun unsigned long nds32_r0; 47*4882a593Smuzhiyun unsigned long nds32_r1; 48*4882a593Smuzhiyun unsigned long nds32_r2; 49*4882a593Smuzhiyun unsigned long nds32_r3; 50*4882a593Smuzhiyun unsigned long nds32_r4; 51*4882a593Smuzhiyun unsigned long nds32_r5; 52*4882a593Smuzhiyun unsigned long nds32_r6; 53*4882a593Smuzhiyun unsigned long nds32_r7; 54*4882a593Smuzhiyun unsigned long nds32_r8; 55*4882a593Smuzhiyun unsigned long nds32_r9; 56*4882a593Smuzhiyun unsigned long nds32_r10; 57*4882a593Smuzhiyun unsigned long nds32_r11; 58*4882a593Smuzhiyun unsigned long nds32_r12; 59*4882a593Smuzhiyun unsigned long nds32_r13; 60*4882a593Smuzhiyun unsigned long nds32_r14; 61*4882a593Smuzhiyun unsigned long nds32_r15; 62*4882a593Smuzhiyun unsigned long nds32_r16; 63*4882a593Smuzhiyun unsigned long nds32_r17; 64*4882a593Smuzhiyun unsigned long nds32_r18; 65*4882a593Smuzhiyun unsigned long nds32_r19; 66*4882a593Smuzhiyun unsigned long nds32_r20; 67*4882a593Smuzhiyun unsigned long nds32_r21; 68*4882a593Smuzhiyun unsigned long nds32_r22; 69*4882a593Smuzhiyun unsigned long nds32_r23; 70*4882a593Smuzhiyun unsigned long nds32_r24; 71*4882a593Smuzhiyun unsigned long nds32_r25; 72*4882a593Smuzhiyun unsigned long nds32_fp; /* $r28 */ 73*4882a593Smuzhiyun unsigned long nds32_gp; /* $r29 */ 74*4882a593Smuzhiyun unsigned long nds32_lp; /* $r30 */ 75*4882a593Smuzhiyun unsigned long nds32_sp; /* $r31 */ 76*4882a593Smuzhiyun unsigned long nds32_ipc; 77*4882a593Smuzhiyun unsigned long fault_address; 78*4882a593Smuzhiyun unsigned long used_math_flag; 79*4882a593Smuzhiyun /* FPU Registers */ 80*4882a593Smuzhiyun struct fpu_struct fpu; 81*4882a593Smuzhiyun struct zol_struct zol; 82*4882a593Smuzhiyun }; 83*4882a593Smuzhiyun 84*4882a593Smuzhiyun #endif 85