Subversion Repositories Kolibri OS

Rev

Rev 164 | 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.            pop edx
  45.            pop ecx
  46.            pop ebx
  47.            pop eax
  48.            leave
  49.  
  50.            save_ring3_context     ;debugger support
  51.  
  52.            mov bl, 16
  53.            jmp exc_c
  54.  
  55. ;           fnstenv [fpu_ctrl]
  56. ;           fnclex
  57. ;           or word [fpu_ctrl], 0111111b
  58. ;           fldenv [fpu_ctrl]
  59.  
  60. ;          pop edx
  61. ;          pop ecx
  62. ;          pop ebx
  63. ;          pop eax
  64.  
  65. ;           leave
  66. ;           iretd
  67.  
  68. align 16
  69. except_19:
  70.            push ebp
  71.            mov ebp, esp
  72.  
  73.            push eax
  74.            push ebx
  75.            push ecx
  76.            push edx
  77.  
  78.            mov ebx, [ss:CURRENT_TASK]
  79.            shl ebx, 8
  80.  
  81.            mov eax, [ss:ebx+PROC_BASE+APPDATA.sse_handler]
  82.            test eax, eax
  83.            jz .default
  84.  
  85.            mov ecx, [reg_eip]
  86.            mov edx, [reg_esp]
  87.            sub edx, 4
  88.            mov [ss:edx+new_app_base], ecx
  89.            mov [reg_esp], edx
  90.            mov dword [reg_eip], eax
  91.  
  92.            pop edx
  93.            pop ecx
  94.            pop ebx
  95.            pop eax
  96.  
  97.            leave
  98.            iretd
  99.  
  100. .default:
  101.            pop edx
  102.            pop ecx
  103.            pop ebx
  104.            pop eax
  105.            leave
  106.  
  107.            save_ring3_context     ;debugger support
  108.  
  109.            mov bl, 19
  110.            jmp exc_c
  111.  
  112. restore reg_eip
  113. restore reg_cs
  114. restore reg_eflags
  115. restore reg_esp
  116. restore reg_ss
  117. ;restore fpu_ctrl
  118.