Changes in kernel/arch/ia32/src/fpu_context.c [24c394b:9d58539] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/ia32/src/fpu_context.c
r24c394b r9d58539 27 27 */ 28 28 29 /** @addtogroup ia32 29 /** @addtogroup ia32 30 30 * @{ 31 31 */ … … 38 38 #include <cpu.h> 39 39 40 /** x87 FPU scr values (P3+ MMX2) */41 enum {42 X87_FLUSH_ZERO_FLAG = (1 << 15),43 X87_ROUND_CONTROL_MASK = (0x3 << 13),44 x87_ROUND_TO_NEAREST_EVEN = (0x0 << 13),45 X87_ROUND_DOWN_TO_NEG_INF = (0x1 << 13),46 X87_ROUND_UP_TO_POS_INF = (0x2 << 13),47 X87_ROUND_TO_ZERO = (0x3 << 13),48 X87_PRECISION_MASK = (1 << 12),49 X87_UNDERFLOW_MASK = (1 << 11),50 X87_OVERFLOW_MASK = (1 << 10),51 X87_ZERO_DIV_MASK = (1 << 9),52 X87_DENORMAL_OP_MASK = (1 << 8),53 X87_INVALID_OP_MASK = (1 << 7),54 X87_DENOM_ZERO_FLAG = (1 << 6),55 X87_PRECISION_EXC_FLAG = (1 << 5),56 X87_UNDERFLOW_EXC_FLAG = (1 << 4),57 X87_OVERFLOW_EXC_FLAG = (1 << 3),58 X87_ZERO_DIV_EXC_FLAG = (1 << 2),59 X87_DENORMAL_EXC_FLAG = (1 << 1),60 X87_INVALID_OP_EXC_FLAG = (1 << 0),61 62 X87_ALL_MASK = X87_PRECISION_MASK | X87_UNDERFLOW_MASK | X87_OVERFLOW_MASK | X87_ZERO_DIV_MASK | X87_DENORMAL_OP_MASK | X87_INVALID_OP_MASK,63 };64 65 40 typedef void (*fpu_context_function)(fpu_context_t *fctx); 66 41 67 static fpu_context_function fpu_save; 68 static fpu_context_function fpu_restore; 42 static fpu_context_function fpu_save, fpu_restore; 69 43 70 44 static void fpu_context_f_save(fpu_context_t *fctx) … … 72 46 asm volatile ( 73 47 "fnsave %[fctx]" 74 : [fctx] "=m" ( fctx->fpu)48 : [fctx] "=m" (*fctx) 75 49 ); 76 50 } … … 80 54 asm volatile ( 81 55 "frstor %[fctx]" 82 : [fctx] "=m" ( fctx->fpu)56 : [fctx] "=m" (*fctx) 83 57 ); 84 58 } … … 88 62 asm volatile ( 89 63 "fxsave %[fctx]" 90 : [fctx] "=m" ( fctx->fpu)64 : [fctx] "=m" (*fctx) 91 65 ); 92 66 } … … 96 70 asm volatile ( 97 71 "fxrstor %[fctx]" 98 : [fctx] "=m" ( fctx->fpu)72 : [fctx] "=m" (*fctx) 99 73 ); 100 74 } … … 103 77 void fpu_fxsr(void) 104 78 { 105 fpu_save =fpu_context_fx_save;106 fpu_restore =fpu_context_fx_restore;79 fpu_save=fpu_context_fx_save; 80 fpu_restore=fpu_context_fx_restore; 107 81 } 108 82 … … 124 98 } 125 99 126 /** Initialize x87 FPU. Mask all exceptions. */127 100 void fpu_init() 128 101 { … … 138 111 "ldmxcsr %[help0]\n" 139 112 : [help0] "+m" (help0), [help1] "+r" (help1) 140 : [magic] "i" ( X87_ALL_MASK)113 : [magic] "i" (0x1f80) 141 114 ); 142 115 }
Note:
See TracChangeset
for help on using the changeset viewer.