Rev 3022 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3022 | Rev 4055 | ||
---|---|---|---|
Line 75... | Line 75... | ||
75 | * cr0.mp = 1 -> we do want lazy context switch |
75 | * cr0.mp = 1 -> we do want lazy context switch |
76 | */ |
76 | */ |
77 | void cpu_setup_fpu(void) |
77 | void cpu_setup_fpu(void) |
78 | { |
78 | { |
79 | asm volatile ( |
79 | asm volatile ( |
80 | "movq %%cr0, %%rax;" |
80 | "movq %%cr0, %%rax\n" |
81 | "btsq $1, %%rax;" /* cr0.mp */ |
81 | "btsq $1, %%rax\n" /* cr0.mp */ |
82 | "btrq $2, %%rax;" /* cr0.em */ |
82 | "btrq $2, %%rax\n" /* cr0.em */ |
83 | "movq %%rax, %%cr0;" |
83 | "movq %%rax, %%cr0\n" |
84 | 84 | ||
85 | "movq %%cr4, %%rax;" |
85 | "movq %%cr4, %%rax\n" |
86 | "bts $9, %%rax;" /* cr4.osfxsr */ |
86 | "bts $9, %%rax\n" /* cr4.osfxsr */ |
87 | "movq %%rax, %%cr4;" |
87 | "movq %%rax, %%cr4\n" |
88 | : |
- | |
89 | : |
- | |
90 | :"%rax" |
88 | ::: "%rax" |
91 | ); |
89 | ); |
92 | } |
90 | } |
93 | 91 | ||
94 | /** Set the TS flag to 1. |
92 | /** Set the TS flag to 1. |
95 | * |
93 | * |
96 | * If a thread accesses coprocessor, exception is run, which |
94 | * If a thread accesses coprocessor, exception is run, which |
97 | * does a lazy fpu context switch. |
95 | * does a lazy fpu context switch. |
98 | * |
96 | * |
99 | */ |
97 | */ |
100 | void fpu_disable(void) |
98 | void fpu_disable(void) |
101 | { |
99 | { |
102 | asm volatile ( |
100 | asm volatile ( |
103 | "mov %%cr0,%%rax;" |
101 | "mov %%cr0, %%rax\n" |
104 | "bts $3,%%rax;" |
102 | "bts $3, %%rax\n" |
105 | "mov %%rax,%%cr0;" |
103 | "mov %%rax, %%cr0\n" |
106 | : |
- | |
107 | : |
- | |
108 | :"%rax" |
104 | ::: "%rax" |
109 | ); |
105 | ); |
110 | } |
106 | } |
111 | 107 | ||
112 | void fpu_enable(void) |
108 | void fpu_enable(void) |
113 | { |
109 | { |
114 | asm volatile ( |
110 | asm volatile ( |
115 | "mov %%cr0,%%rax;" |
111 | "mov %%cr0, %%rax\n" |
116 | "btr $3,%%rax;" |
112 | "btr $3, %%rax\n" |
117 | "mov %%rax,%%cr0;" |
113 | "mov %%rax, %%cr0\n" |
118 | : |
- | |
119 | : |
- | |
120 | :"%rax" |
114 | ::: "%rax" |
121 | ); |
115 | ); |
122 | } |
116 | } |
123 | 117 | ||
124 | void cpu_arch_init(void) |
118 | void cpu_arch_init(void) |
125 | { |
119 | { |
126 | CPU->arch.tss = tss_p; |
120 | CPU->arch.tss = tss_p; |