|
#define | SSE_TEST_IRQ 10 |
|
#define | MXCSR_FZ (1<<15) /* Flush to zero */ |
|
#define | MXCSR_RC(x) (((x)&3)<<13) /* Rounding ctrl */ |
|
#define | MXCSR_PM (1<<12) /* Precision msk */ |
|
#define | MXCSR_UM (1<<11) /* Underflow msk */ |
|
#define | MXCSR_OM (1<<10) /* Overflow msk */ |
|
#define | MXCSR_ZM (1<< 9) /* Divbyzero msk */ |
|
#define | MXCSR_DM (1<< 8) /* Denormal msk */ |
|
#define | MXCSR_IM (1<< 7) /* Invalidop msk */ |
|
#define | MXCSR_DAZ (1<< 6) /* Denorml are 0 */ |
|
#define | MXCSR_PE (1<< 5) /* Precision flg */ |
|
#define | MXCSR_UE (1<< 4) /* Underflow flg */ |
|
#define | MXCSR_OE (1<< 3) /* Overflow flg */ |
|
#define | MXCSR_ZE (1<< 2) /* Divbyzero flg */ |
|
#define | MXCSR_DE (1<< 1) /* Denormal flg */ |
|
#define | MXCSR_IE (1<< 0) /* Invalidop flg */ |
|
#define | MXCSR_ALLM (MXCSR_PM | MXCSR_UM | MXCSR_OM | MXCSR_ZM | MXCSR_DM | MXCSR_IM) |
|
#define | MXCSR_ALLE (MXCSR_PE | MXCSR_UE | MXCSR_OE | MXCSR_ZE | MXCSR_DE | MXCSR_IE) |
|
#define | FPSR_B (1<<15) /* FPU busy */ |
|
#define | FPSR_C3 (1<<14) /* Cond code C3 */ |
|
#define | FPSR_TOP(x) (((x)&7)<<11) /* TOP */ |
|
#define | FPSR_C2 (1<<10) /* Cond code C2 */ |
|
#define | FPSR_C1 (1<< 9) /* Cond code C1 */ |
|
#define | FPSR_C0 (1<< 8) /* Cond code C0 */ |
|
#define | FPSR_ES (1<< 7) /* Error summary */ |
|
#define | FPSR_SF (1<< 6) /* Stack fault */ |
|
#define | FPSR_PE (1<< 5) /* Precision flg */ |
|
#define | FPSR_UE (1<< 4) /* Underflow flg */ |
|
#define | FPSR_OE (1<< 3) /* Overflow flg */ |
|
#define | FPSR_ZE (1<< 2) /* Divbyzero flg */ |
|
#define | FPSR_DE (1<< 1) /* Denormal flg */ |
|
#define | FPSR_IE (1<< 0) /* Invalidop flg */ |
|
#define | FPCW_X (1<<12) /* Infinity ctrl */ |
|
#define | FPCW_RC(x) (((x)&3)<<10) /* Rounding ctrl */ |
|
#define | FPCW_PC(x) (((x)&3)<< 8) /* Precision ctl */ |
|
#define | FPCW_PM (1<< 5) /* Precision msk */ |
|
#define | FPCW_UM (1<< 4) /* Underflow msk */ |
|
#define | FPCW_OM (1<< 3) /* Overflow msk */ |
|
#define | FPCW_ZM (1<< 2) /* Divbyzero msk */ |
|
#define | FPCW_DM (1<< 1) /* Denormal msk */ |
|
#define | FPCW_IM (1<< 0) /* Invalidop msk */ |
|
#define | FPCW_ALLM (FPCW_PM | FPCW_UM | FPCW_OM | FPCW_ZM | FPCW_DM | FPCW_IM) |
|
#define | FPSR_ALLE (FPSR_ES | FPSR_SF | FPSR_PE | FPSR_UE | FPSR_OE | FPSR_ZE | FPSR_DE | FPSR_IE) |
|
#define | FPUCLOBBER |
|
#define | SSECLOBBER |
|
#define | H08 "0x%02"PRIx8 |
|
#define | H16 "0x%04"PRIx16 |
|
#define | H32 "0x%08"PRIx32 |
|
#define | F16 "mismatch ("H16" != "H16")\n" |
|
#define | FLDCMP(fld, fmt) |
|
#define | FLTCMP(i) |
|
#define | XMMCMP(i) |
|
#define | FP_EXC 0 |
|
#define | IRQ_EXC 1 |
|
#define | SSE_EXC -1 |
|
#define | __INTRAISE(x) " int $32+"#x" \n" |
|
#define | INTRAISE(x) __INTRAISE(x) |
|
#define | SSE_TEST_HP_FAILED 1 |
|
#define | SSE_TEST_FSPR_FAILED 2 |
|
#define | SSE_TEST_CTXTCMP_FAILED 4 |
|
#define | MKCASE(X) case FPE_##X: msg="FPE_"#X; break; |
|
#define | CLRXMM(i) __asm__ volatile("pxor %%xmm"#i", %%xmm"#i:::"xmm"#i) |
|
|
struct Context_Control_sse | __attribute__ ((aligned(16))) |
|
void | fp_st1 (uint8_t(*p_dst)[10], double v) |
|
void | fp_st (Context_Control_sse *p_ctxt, int i, double v) |
|
double | fp_ld1 (uint8_t(*p_src)[10]) |
|
double | fp_ld (Context_Control_sse *p_ctxt, int i) |
|
void | all_clobber (uint32_t v1, uint32_t v2) |
|
| __asm__ ("all_clobber: \n" " finit \n" " movq 0(%esp), %xmm0 \n" " punpcklqdq %xmm0, %xmm0 \n" " movdqa %xmm0, %xmm1 \n" " movdqa %xmm0, %xmm2 \n" " movdqa %xmm0, %xmm3 \n" " movdqa %xmm0, %xmm4 \n" " movdqa %xmm0, %xmm5 \n" " movdqa %xmm0, %xmm6 \n" " movdqa %xmm0, %xmm7 \n" " ret \n") |
|
void | init_ctxt (Context_Control_sse *p_ctxt) |
|
| __asm__ ("init_ctxt: \n" " finit \n" " mov 4(%esp), %eax\n" " fxsave (%eax) \n" " fwait \n" " ret \n") |
|
| __asm__ ("do_raise: \n" " fwait \n" " test %eax, %eax \n" " je 2f \n" " jl 1f \n" " jmp 2f \n" "1: sqrtps %xmm0, %xmm0 \n" "2: \n" " ret \n") |
|
int | main (int argc, char **argv) |
|
uint32_t | mfcr4 () |
|
void | mtcr4 (uint32_t rval) |
|
uint32_t | mfmxcsr () |
|
void | mtmxcsr (uint32_t rval) |
|
float | sseraise () |
|
Test FPU/SSE Context Save and Restore.