Changeset 3b05862f in mainline for arch/ia32/src/fpu_context.c
- Timestamp:
- 2006-03-15T16:12:37Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 2f7342d
- Parents:
- b629483
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
arch/ia32/src/fpu_context.c
rb629483 r3b05862f 32 32 #include <cpu.h> 33 33 34 void fpu_context_save(fpu_context_t *fctx) 34 typedef void (*fpu_context_function)(fpu_context_t *fctx); 35 36 static fpu_context_function fpu_save,fpu_restore; 37 38 39 40 static void fpu_context_f_save(fpu_context_t *fctx) 35 41 { 36 42 __asm__ volatile ( … … 40 46 } 41 47 42 43 void fpu_context_restore(fpu_context_t *fctx) 48 static void fpu_context_f_restore(fpu_context_t *fctx) 44 49 { 45 50 __asm__ volatile ( … … 49 54 } 50 55 56 static void fpu_context_fx_save(fpu_context_t *fctx) 57 { 58 __asm__ volatile ( 59 "fxsave %0" 60 : "=m"(*fctx) 61 ); 62 } 63 64 static void fpu_context_fx_restore(fpu_context_t *fctx) 65 { 66 __asm__ volatile ( 67 "fxrstor %0" 68 : "=m"(*fctx) 69 ); 70 } 71 72 /* 73 Setup using fxsr instruction 74 */ 75 void fpu_fxsr(void) 76 { 77 fpu_save=fpu_context_fx_save; 78 fpu_restore=fpu_context_fx_restore; 79 } 80 /* 81 Setup using not fxsr instruction 82 */ 83 void fpu_fsr(void) 84 { 85 fpu_save=fpu_context_f_save; 86 fpu_restore=fpu_context_f_restore; 87 } 88 89 90 91 void fpu_context_save(fpu_context_t *fctx) 92 { 93 fpu_save(fctx); 94 } 95 96 void fpu_context_restore(fpu_context_t *fctx) 97 { 98 fpu_restore(fctx); 99 } 100 101 102 51 103 void fpu_init() 52 104 { 105 __u32 help0=0,help1=0; 53 106 __asm__ volatile ( 54 "fninit;" 107 "fninit;\n" 108 "stmxcsr %0\n" 109 "mov %0,%1;\n" 110 "or %2,%1;\n" 111 "mov %1,%0;\n" 112 "ldmxcsr %0;\n" 113 :"+m"(help0),"+r"(help1) 114 :"i"(0x1f80) 55 115 ); 56 116 }
Note:
See TracChangeset
for help on using the changeset viewer.