Changeset 3b05862f in mainline for arch/ia32/src
- Timestamp:
- 2006-03-15T16:12:37Z (20 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 2f7342d
- Parents:
- b629483
- Location:
- arch/ia32/src
- Files:
-
- 4 edited
-
cpu/cpu.c (modified) (1 diff)
-
fpu_context.c (modified) (3 diffs)
-
interrupt.c (modified) (1 diff)
-
pm.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
arch/ia32/src/cpu/cpu.c
rb629483 r3b05862f 93 93 void cpu_arch_init(void) 94 94 { 95 __u32 help=0; 96 95 97 CPU->arch.tss = tss_p; 96 98 CPU->fpu_owner=NULL; 99 100 cpuid_feature_info fi; 101 cpuid_extended_feature_info efi; 102 103 cpu_info_t info; 104 cpuid(1, &info); 105 106 fi.word=info.cpuid_edx; 107 efi.word=info.cpuid_ecx; 108 109 if(fi.bits.fxsr) fpu_fxsr(); 110 else fpu_fsr(); 111 112 if(fi.bits.sse) asm volatile ( 113 "mov %%cr4,%0;\n" 114 "or %1,%0;\n" 115 "mov %0,%%cr4;\n" 116 :"+r"(help) 117 :"i"(CR4_OSFXSR_MASK|(1<<10)) 118 ); 119 97 120 } 98 121 -
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 } -
arch/ia32/src/interrupt.c
rb629483 r3b05862f 89 89 } 90 90 91 void simd_fp_exception(int n, istate_t *istate) 92 { 93 94 PRINT_INFO_ERRCODE(istate); 95 __u32 mxcsr; 96 asm 97 ( 98 "stmxcsr %0;\n" 99 :"=m"(mxcsr) 100 ); 101 printf("MXCSR: %X\n",(__native)(mxcsr)); 102 panic("SIMD FP exception(19)\n"); 103 } 104 91 105 void nm_fault(int n, istate_t *istate) 92 106 { -
arch/ia32/src/pm.c
rb629483 r3b05862f 131 131 exc_register( 7, "nm_fault", (iroutine) nm_fault); 132 132 exc_register(12, "ss_fault", (iroutine) ss_fault); 133 exc_register(19, "simd_fp", (iroutine) simd_fp_exception); 133 134 } 134 135
Note:
See TracChangeset
for help on using the changeset viewer.
