Subversion Repositories Kolibri OS

Rev

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