Subversion Repositories Kolibri OS

Rev

Rev 8869 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 8869 Rev 9715
Line 1... Line 1...
1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2
;;                                                              ;;
2
;;                                                              ;;
3
;; Copyright (C) KolibriOS team 2004-2017. All rights reserved. ;;
3
;; Copyright (C) KolibriOS team 2004-2022. All rights reserved. ;;
4
;; Distributed under terms of the GNU General Public License    ;;
4
;; Distributed under terms of the GNU General Public License    ;;
5
;;                                                              ;;
5
;;                                                              ;;
6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Line 7... Line 7...
7
 
7
 
Line 8... Line 8...
8
$Revision: 8869 $
8
$Revision: 9715 $
9
 
9
 
10
 
10
 
Line 175... Line 175...
175
        call    save_fpu_context
175
        call    save_fpu_context
176
        jmp     .exit
176
        jmp     .exit
177
.save:
177
.save:
178
        mov     [fpu_owner], esi
178
        mov     [fpu_owner], esi
Line 179... Line 179...
179
 
179
 
180
        shl     ecx, 8
180
        shl     ecx, BSF sizeof.APPDATA
Line 181... Line 181...
181
        mov     eax, [ecx+SLOT_BASE+APPDATA.fpu_state]
181
        mov     eax, [SLOT_BASE + ecx + APPDATA.fpu_state]
Line 182... Line 182...
182
 
182
 
183
        call    save_context
183
        call    save_context
184
 
184
 
185
; first 512 bytes of XSAVE area have the same format as FXSAVE
185
; first 512 bytes of XSAVE area have the same format as FXSAVE
186
        shl     esi, 8
186
        shl     esi, BSF sizeof.APPDATA
187
        mov     esi, [esi+SLOT_BASE+APPDATA.fpu_state]
187
        mov     esi, [SLOT_BASE + esi + APPDATA.fpu_state]
188
        mov     ecx, 512/4
188
        mov     ecx, 512/4
189
        cld
189
        cld
Line 223... Line 223...
223
        call    save_context
223
        call    save_context
224
        jmp     .exit
224
        jmp     .exit
225
.save:
225
.save:
226
        mov     [fpu_owner], esi
226
        mov     [fpu_owner], esi
Line 227... Line 227...
227
 
227
 
228
        shl     ecx, 8
228
        shl     ecx, BSF sizeof.APPDATA
Line 229... Line 229...
229
        mov     eax, [ecx+SLOT_BASE+APPDATA.fpu_state]
229
        mov     eax, [SLOT_BASE + ecx + APPDATA.fpu_state]
Line 230... Line 230...
230
 
230
 
231
        call    save_context
231
        call    save_context
232
 
232
 
233
        shl     esi, 8
233
        shl     esi, BSF sizeof.APPDATA
234
        mov     esi, [esi+SLOT_BASE+APPDATA.fpu_state]
234
        mov     esi, [SLOT_BASE + esi + APPDATA.fpu_state]
235
        mov     ecx, [xsave_area_size]
235
        mov     ecx, [xsave_area_size]
236
        add     ecx, 3
236
        add     ecx, 3
Line 244... Line 244...
244
        pop     ecx
244
        pop     ecx
245
        ret
245
        ret
Line 246... Line 246...
246
 
246
 
247
align 4
247
align 4
248
save_context:
248
save_context:
249
        bt      [cpu_caps+(CAPS_OSXSAVE/32)*4], CAPS_OSXSAVE mod 32
249
        bt      [cpu_caps + (CAPS_OSXSAVE/32)*4], CAPS_OSXSAVE mod 32
250
        jnc     save_fpu_context
250
        jnc     save_fpu_context
251
        push    eax edx
251
        push    eax edx
252
        mov     ecx, eax
252
        mov     ecx, eax
253
        mov     eax, [xsave_eax]
253
        mov     eax, [xsave_eax]
Line 295... Line 295...
295
        popfd
295
        popfd
296
        pop     esi
296
        pop     esi
297
        pop     ecx
297
        pop     ecx
298
        ret
298
        ret
299
.copy:
299
.copy:
300
        shl     eax, 8
300
        shl     eax, BSF sizeof.APPDATA
301
        mov     edi, [eax+SLOT_BASE+APPDATA.fpu_state]
301
        mov     edi, [SLOT_BASE + eax + APPDATA.fpu_state]
302
        mov     ecx, 512/4
302
        mov     ecx, 512/4
303
        cld
303
        cld
304
        rep movsd
304
        rep movsd
305
        popfd
305
        popfd
306
        pop     esi
306
        pop     esi
Line 321... Line 321...
321
        mov     eax, [current_slot_idx]
321
        mov     eax, [current_slot_idx]
322
        cmp     ecx, eax
322
        cmp     ecx, eax
323
        jne     .copy
323
        jne     .copy
Line 324... Line 324...
324
 
324
 
325
        clts
325
        clts
326
        bt      [cpu_caps+(CAPS_OSXSAVE/32)*4], CAPS_OSXSAVE mod 32
326
        bt      [cpu_caps + (CAPS_OSXSAVE/32)*4], CAPS_OSXSAVE mod 32
327
        jnc     .no_xsave
327
        jnc     .no_xsave
328
        push    edx
328
        push    edx
329
        mov     eax, [xsave_eax]
329
        mov     eax, [xsave_eax]
330
        mov     edx, [xsave_edx]
330
        mov     edx, [xsave_edx]
Line 349... Line 349...
349
        popfd
349
        popfd
350
        pop     esi
350
        pop     esi
351
        pop     ecx
351
        pop     ecx
352
        ret
352
        ret
353
.copy:
353
.copy:
354
        shl     eax, 8
354
        shl     eax, BSF sizeof.APPDATA
355
        mov     edi, [eax+SLOT_BASE+APPDATA.fpu_state]
355
        mov     edi, [SLOT_BASE + eax + APPDATA.fpu_state]
356
        mov     ecx, [xsave_area_size]
356
        mov     ecx, [xsave_area_size]
357
        add     ecx, 3
357
        add     ecx, 3
358
        shr     ecx, 2
358
        shr     ecx, 2
359
        cld
359
        cld
360
        rep movsd
360
        rep movsd
Line 373... Line 373...
373
 
373
 
374
        mov     ebx, [fpu_owner]
374
        mov     ebx, [fpu_owner]
375
        cmp     ebx, [current_slot_idx]
375
        cmp     ebx, [current_slot_idx]
Line 376... Line 376...
376
        je      .exit
376
        je      .exit
377
 
377
 
378
        shl     ebx, 8
378
        shl     ebx, BSF sizeof.APPDATA
379
        mov     eax, [ebx+SLOT_BASE+APPDATA.fpu_state]
379
        mov     eax, [SLOT_BASE + ebx + APPDATA.fpu_state]
380
        bt      [cpu_caps+(CAPS_OSXSAVE/32)*4], CAPS_OSXSAVE mod 32
380
        bt      [cpu_caps + (CAPS_OSXSAVE/32)*4], CAPS_OSXSAVE mod 32
381
        jnc     .no_xsave
381
        jnc     .no_xsave
382
        mov     ecx, eax
382
        mov     ecx, eax
383
        mov     eax, [xsave_eax]
383
        mov     eax, [xsave_eax]
384
        mov     edx, [xsave_edx]
384
        mov     edx, [xsave_edx]
385
        xsave   [ecx]
385
        xsave   [ecx]
386
        mov     ebx, [current_slot_idx]
386
        mov     ebx, [current_slot_idx]
387
        mov     [fpu_owner], ebx
387
        mov     [fpu_owner], ebx
388
        shl     ebx, 8
388
        shl     ebx, BSF sizeof.APPDATA
389
        mov     ecx, [ebx+SLOT_BASE+APPDATA.fpu_state]
389
        mov     ecx, [SLOT_BASE + ebx + APPDATA.fpu_state]
390
        xrstor  [ecx]
390
        xrstor  [ecx]
391
.exit:
391
.exit:
392
        restore_ring3_context
392
        restore_ring3_context
Line 396... Line 396...
396
        jnc     .no_SSE
396
        jnc     .no_SSE
Line 397... Line 397...
397
 
397
 
398
        fxsave  [eax]
398
        fxsave  [eax]
399
        mov     ebx, [current_slot_idx]
399
        mov     ebx, [current_slot_idx]
400
        mov     [fpu_owner], ebx
400
        mov     [fpu_owner], ebx
401
        shl     ebx, 8
401
        shl     ebx, BSF sizeof.APPDATA
402
        mov     eax, [ebx+SLOT_BASE+APPDATA.fpu_state]
402
        mov     eax, [SLOT_BASE + ebx + APPDATA.fpu_state]
403
        fxrstor [eax]
403
        fxrstor [eax]
404
        restore_ring3_context
404
        restore_ring3_context
Line 405... Line 405...
405
        iret
405
        iret
406
 
406
 
407
.no_SSE:
407
.no_SSE:
408
        fnsave  [eax]
408
        fnsave  [eax]
409
        mov     ebx, [current_slot_idx]
409
        mov     ebx, [current_slot_idx]
410
        mov     [fpu_owner], ebx
410
        mov     [fpu_owner], ebx
411
        shl     ebx, 8
411
        shl     ebx, BSF sizeof.APPDATA
412
        mov     eax, [ebx+SLOT_BASE+APPDATA.fpu_state]
412
        mov     eax, [SLOT_BASE + ebx + APPDATA.fpu_state]
413
        frstor  [eax]
413
        frstor  [eax]
Line 414... Line 414...
414
        restore_ring3_context
414
        restore_ring3_context