Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1.  
  2.  
  3. reg_eip       equ ebp+4
  4. reg_cs        equ ebp+8
  5. reg_eflags    equ ebp+12
  6. reg_esp       equ ebp+16
  7. reg_ss        equ ebp+20
  8. fpu_ctrl      equ ebp-28
  9.  
  10. align 4
  11. except_16:
  12.            push ebp
  13.            mov ebp, esp
  14.            sub esp, 28
  15.  
  16.            push eax
  17.            push ebx
  18.            push ecx
  19.            push edx
  20.  
  21.            mov ebx, [ss:CURRENT_TASK]
  22.            shl ebx, 8
  23.  
  24.            mov eax, [ss:ebx+PROC_BASE+APPDATA.fpu_handler]
  25.            test eax, eax
  26.            jz .default
  27.  
  28.            mov ecx, [reg_eip]
  29.            mov edx, [reg_esp]
  30.            sub edx, 4
  31.            mov [ss:edx+new_app_base], ecx
  32.            mov [reg_esp], edx
  33.            mov dword [reg_eip], eax
  34.  
  35.            pop edx
  36.            pop ecx
  37.            pop ebx
  38.            pop eax
  39.  
  40.            leave
  41.            iretd
  42.  
  43. .default:
  44.  
  45.            fnstenv [fpu_ctrl]
  46.            fnclex
  47.            or word [fpu_ctrl], 0111111b
  48.            fldenv [fpu_ctrl]
  49.  
  50.            pop edx
  51.            pop ecx
  52.            pop ebx
  53.            pop eax
  54.  
  55.            leave
  56.            iretd
  57.  
  58.  
  59. restore reg_eip
  60. restore reg_cs
  61. restore reg_eflags
  62. restore reg_esp
  63. restore reg_ss
  64. restore fpu_ctrl
  65.