Rev 378 | Rev 425 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 378 | Rev 380 | ||
---|---|---|---|
Line 55... | Line 55... | ||
55 | cmp ecx, eax |
55 | cmp ecx, eax |
56 | jne .save |
56 | jne .save |
57 | .copy: |
57 | .copy: |
58 | shl eax, 8 |
58 | shl eax, 8 |
59 | mov esi, [eax+PROC_BASE+APPDATA.fpu_state] |
59 | mov esi, [eax+SLOT_BASE+APPDATA.fpu_state] |
60 | mov ecx, 512/4 |
60 | mov ecx, 512/4 |
61 | cld |
61 | cld |
62 | rep movsd |
62 | rep movsd |
63 | fninit |
63 | fninit |
64 | 64 | ||
Line 70... | Line 70... | ||
70 | .save: |
70 | .save: |
71 | mov [fpu_owner], eax |
71 | mov [fpu_owner], eax |
72 | 72 | ||
Line 73... | Line 73... | ||
73 | shl ecx, 8 |
73 | shl ecx, 8 |
74 | mov ecx, [ecx+PROC_BASE+APPDATA.fpu_state] |
74 | mov ecx, [ecx+SLOT_BASE+APPDATA.fpu_state] |
Line 75... | Line 75... | ||
75 | 75 | ||
76 | bt [cpu_caps], CAPS_SSE |
76 | bt [cpu_caps], CAPS_SSE |
Line 77... | Line 77... | ||
77 | jnc .no_SSE |
77 | jnc .no_SSE |
Line 115... | Line 115... | ||
115 | pop ecx |
115 | pop ecx |
116 | ret |
116 | ret |
117 | .copy: |
117 | .copy: |
118 | shl eax, 8 |
118 | shl eax, 8 |
119 | mov edi, [eax+PROC_BASE+APPDATA.fpu_state] |
119 | mov edi, [eax+SLOT_BASE+APPDATA.fpu_state] |
120 | mov ecx, 512/4 |
120 | mov ecx, 512/4 |
121 | cld |
121 | cld |
122 | rep movsd |
122 | rep movsd |
123 | popfd |
123 | popfd |
124 | pop esi |
124 | pop esi |
125 | pop ecx |
125 | pop ecx |
Line 137... | Line 137... | ||
137 | cmp ebx, [CURRENT_TASK] |
137 | cmp ebx, [CURRENT_TASK] |
138 | je .exit |
138 | je .exit |
139 | 139 | ||
Line 140... | Line 140... | ||
140 | shl ebx, 8 |
140 | shl ebx, 8 |
141 | mov eax, [ebx+PROC_BASE+APPDATA.fpu_state] |
141 | mov eax, [ebx+SLOT_BASE+APPDATA.fpu_state] |
142 | bt [cpu_caps], CAPS_SSE |
142 | bt [cpu_caps], CAPS_SSE |
143 | jnc .no_SSE |
143 | jnc .no_SSE |
Line 144... | Line 144... | ||
144 | 144 | ||
145 | fxsave [eax] |
145 | fxsave [eax] |
146 | mov ebx, [CURRENT_TASK] |
146 | mov ebx, [CURRENT_TASK] |
147 | mov [fpu_owner], ebx |
147 | mov [fpu_owner], ebx |
148 | shl ebx, 8 |
148 | shl ebx, 8 |
149 | mov eax, [ebx+PROC_BASE+APPDATA.fpu_state] |
149 | mov eax, [ebx+SLOT_BASE+APPDATA.fpu_state] |
150 | fxrstor [eax] |
150 | fxrstor [eax] |
151 | .exit: |
151 | .exit: |
152 | restore_ring3_context |
152 | restore_ring3_context |
Line 153... | Line 153... | ||
153 | iret |
153 | iret |
154 | 154 | ||
155 | .no_SSE: |
155 | .no_SSE: |
156 | fnsave [eax] |
156 | fnsave [eax] |
157 | mov ebx, [CURRENT_TASK] |
157 | mov ebx, [CURRENT_TASK] |
158 | mov [fpu_owner], ebx |
158 | mov [fpu_owner], ebx |
159 | shl ebx, 8 |
159 | shl ebx, 8 |
160 | mov eax, [ebx+PROC_BASE+APPDATA.fpu_state] |
160 | mov eax, [ebx+SLOT_BASE+APPDATA.fpu_state] |
161 | frstor [eax] |
161 | frstor [eax] |
Line 162... | Line 162... | ||
162 | restore_ring3_context |
162 | restore_ring3_context |
Line 184... | Line 184... | ||
184 | 184 | ||
Line 185... | Line 185... | ||
185 | mov ebx, [ss:CURRENT_TASK] |
185 | mov ebx, [ss:CURRENT_TASK] |
186 | shl ebx, 8 |
186 | shl ebx, 8 |
Line 187... | Line 187... | ||
187 | 187 | ||
188 | mov eax, [ss:ebx+PROC_BASE+APPDATA.fpu_handler] |
188 | mov eax, [ss:ebx+SLOT_BASE+APPDATA.fpu_handler] |
189 | test eax, eax |
189 | test eax, eax |
Line 190... | Line 190... | ||
190 | jz .default |
190 | jz .default |
191 | 191 | ||
Line 228... | Line 228... | ||
228 | 228 | ||
Line 229... | Line 229... | ||
229 | mov ebx, [ss:CURRENT_TASK] |
229 | mov ebx, [ss:CURRENT_TASK] |
230 | shl ebx, 8 |
230 | shl ebx, 8 |
Line 231... | Line 231... | ||
231 | 231 | ||
232 | mov eax, [ss:ebx+PROC_BASE+APPDATA.sse_handler] |
232 | mov eax, [ss:ebx+SLOT_BASE+APPDATA.sse_handler] |
233 | test eax, eax |
233 | test eax, eax |
Line 234... | Line 234... | ||
234 | jz .default |
234 | jz .default |
235 | 235 |