Changeset f24d300 in mainline for kernel/arch/amd64/src
- Timestamp:
- 2009-03-03T15:52:55Z (16 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- e762b43
- Parents:
- add04f7
- Location:
- kernel/arch/amd64/src
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/amd64/src/amd64.c
radd04f7 rf24d300 73 73 static void clean_IOPL_NT_flags(void) 74 74 { 75 asm (75 asm volatile ( 76 76 "pushfq\n" 77 77 "pop %%rax\n" … … 79 79 "pushq %%rax\n" 80 80 "popfq\n" 81 : 82 : 83 : "%rax" 81 ::: "%rax" 84 82 ); 85 83 } … … 91 89 static void clean_AM_flag(void) 92 90 { 93 asm (91 asm volatile ( 94 92 "mov %%cr0, %%rax\n" 95 93 "and $~(0x40000), %%rax\n" 96 94 "mov %%rax, %%cr0\n" 97 : 98 : 99 : "%rax" 95 ::: "%rax" 100 96 ); 101 97 } -
kernel/arch/amd64/src/cpu/cpu.c
radd04f7 rf24d300 78 78 { 79 79 asm volatile ( 80 "movq %%cr0, %%rax;" 81 "btsq $1, %%rax;" /* cr0.mp */ 82 "btrq $2, %%rax;" /* cr0.em */ 83 "movq %%rax, %%cr0;" 84 85 "movq %%cr4, %%rax;" 86 "bts $9, %%rax;" /* cr4.osfxsr */ 87 "movq %%rax, %%cr4;" 88 : 89 : 90 :"%rax" 91 ); 80 "movq %%cr0, %%rax\n" 81 "btsq $1, %%rax\n" /* cr0.mp */ 82 "btrq $2, %%rax\n" /* cr0.em */ 83 "movq %%rax, %%cr0\n" 84 85 "movq %%cr4, %%rax\n" 86 "bts $9, %%rax\n" /* cr4.osfxsr */ 87 "movq %%rax, %%cr4\n" 88 ::: "%rax" 89 ); 92 90 } 93 91 94 /** Set the TS flag to 1. 92 /** Set the TS flag to 1. 95 93 * 96 94 * If a thread accesses coprocessor, exception is run, which … … 100 98 void fpu_disable(void) 101 99 { 102 asm volatile ( 103 "mov %%cr0,%%rax;" 104 "bts $3,%%rax;" 105 "mov %%rax,%%cr0;" 106 : 107 : 108 :"%rax" 109 ); 100 asm volatile ( 101 "mov %%cr0, %%rax\n" 102 "bts $3, %%rax\n" 103 "mov %%rax, %%cr0\n" 104 ::: "%rax" 105 ); 110 106 } 111 107 112 108 void fpu_enable(void) 113 109 { 114 asm volatile ( 115 "mov %%cr0,%%rax;" 116 "btr $3,%%rax;" 117 "mov %%rax,%%cr0;" 118 : 119 : 120 :"%rax" 121 ); 110 asm volatile ( 111 "mov %%cr0, %%rax\n" 112 "btr $3, %%rax\n" 113 "mov %%rax, %%cr0\n" 114 ::: "%rax" 115 ); 122 116 } 123 117 -
kernel/arch/amd64/src/fpu_context.c
radd04f7 rf24d300 40 40 { 41 41 asm volatile ( 42 "fxsave % 0"43 : "=m"(*fctx)44 42 "fxsave %[fctx]\n" 43 : [fctx] "=m" (*fctx) 44 ); 45 45 } 46 46 … … 49 49 { 50 50 asm volatile ( 51 "fxrstor % 0"52 : "=m"(*fctx)53 51 "fxrstor %[fctx]\n" 52 : [fctx] "=m" (*fctx) 53 ); 54 54 } 55 55 … … 58 58 /* TODO: Zero all SSE, MMX etc. registers */ 59 59 asm volatile ( 60 "fninit ;"60 "fninit\n" 61 61 ); 62 62 } -
kernel/arch/amd64/src/userspace.c
radd04f7 rf24d300 27 27 */ 28 28 29 /** @addtogroup amd64 29 /** @addtogroup amd64 30 30 * @{ 31 31 */ … … 48 48 void userspace(uspace_arg_t *kernel_uarg) 49 49 { 50 ipl_t ipl ;50 ipl_t ipl = interrupts_disable(); 51 51 52 ipl = interrupts_disable(); 53 54 /* Clear CF,PF,AF,ZF,SF,DF,OF */ 52 /* Clear CF, PF, AF, ZF, SF, DF, OF */ 55 53 ipl &= ~(0xcd4); 56 57 asm volatile ( ""58 "pushq %0\n"59 "pushq %1\n"60 "pushq %2\n"61 "pushq %3\n"62 "pushq %4\n"63 "movq %5, %%rax\n"64 /* %rdi is defined to hold pcb_ptr - set it to 0 */65 "xorq %%rdi, %%rdi\n"66 "iretq\n"67 : :68 "i" (gdtselector(UDATA_DES) | PL_USER),69 "r" (kernel_uarg->uspace_stack+THREAD_STACK_SIZE),70 "r" (ipl),71 "i" (gdtselector(UTEXT_DES) | PL_USER),72 "r" (kernel_uarg->uspace_entry),73 "r" (kernel_uarg->uspace_uarg)74 75 54 55 asm volatile ( 56 "pushq %[udata_des]\n" 57 "pushq %[stack_size]\n" 58 "pushq %[ipl]\n" 59 "pushq %[utext_des]\n" 60 "pushq %[entry]\n" 61 "movq %[uarg], %%rax\n" 62 63 /* %rdi is defined to hold pcb_ptr - set it to 0 */ 64 "xorq %%rdi, %%rdi\n" 65 "iretq\n" 66 :: [udata_des] "i" (gdtselector(UDATA_DES) | PL_USER), 67 [stack_size] "r" (kernel_uarg->uspace_stack + THREAD_STACK_SIZE), 68 [ipl] "r" (ipl), 69 [utext_des] "i" (gdtselector(UTEXT_DES) | PL_USER), 70 [entry] "r" (kernel_uarg->uspace_entry), 71 [uarg] "r" (kernel_uarg->uspace_uarg) 72 : "rax" 73 ); 76 74 77 75 /* Unreachable */ 78 for(;;) 79 ; 76 while (1); 80 77 } 81 78
Note:
See TracChangeset
for help on using the changeset viewer.