]> gitweb.factorcode.org Git - factor.git/blobdiff - basis/cpu/x86/32/bootstrap.factor
use radix literals
[factor.git] / basis / cpu / x86 / 32 / bootstrap.factor
index 2eaa1f387b00a2373bca63b33e990ca66c4d137a..a3edd70ffb43f9df3ebcc8536655c9d8191bb8d7 100755 (executable)
@@ -30,6 +30,7 @@ IN: bootstrap.x86
 : link-reg ( -- reg ) EBX ;
 : fixnum>slot@ ( -- ) temp0 2 SAR ;
 : rex-length ( -- n ) 0 ;
+: red-zone-size ( -- n ) 0 ;
 
 : jit-call ( name -- )
     0 CALL f rc-relative rel-dlsym ;
@@ -103,7 +104,9 @@ IN: bootstrap.x86
 
 :: jit-signal-handler-prolog ( -- frame-size )
     stack-frame-size 8 bootstrap-cells + :> frame-size
-    ESP frame-size bootstrap-cell - SUB ! minus a cell for return address
+    ! minus a cell each for flags and return address
+    ! use LEA so we don't dirty flags
+    ESP ESP frame-size 2 bootstrap-cells - neg [+] LEA
     ESP []                    EAX MOV
     ESP 1 bootstrap-cells [+] ECX MOV
     ESP 2 bootstrap-cells [+] EDX MOV
@@ -111,6 +114,7 @@ IN: bootstrap.x86
     ESP 4 bootstrap-cells [+] EBP MOV
     ESP 5 bootstrap-cells [+] ESI MOV
     ESP 6 bootstrap-cells [+] EDI MOV
+    PUSHF
     ESP frame-size 3 bootstrap-cells - [+] 0 MOV rc-absolute-cell rel-this
     ESP frame-size 2 bootstrap-cells - [+] frame-size MOV
     ! subprimitive definition assumes vm's been loaded
@@ -118,6 +122,7 @@ IN: bootstrap.x86
     frame-size ;
 
 :: jit-signal-handler-epilog ( frame-size -- )
+    POPF
     EAX ESP []                    MOV
     ECX ESP 1 bootstrap-cells [+] MOV
     EDX ESP 2 bootstrap-cells [+] MOV
@@ -125,7 +130,7 @@ IN: bootstrap.x86
     EBP ESP 4 bootstrap-cells [+] MOV
     ESI ESP 5 bootstrap-cells [+] MOV
     EDI ESP 6 bootstrap-cells [+] MOV
-    ESP frame-size bootstrap-cell - ADD ;
+    ESP ESP frame-size 2 bootstrap-cells - [+] LEA ;
 
 [
     EAX ds-reg [] MOV
@@ -141,6 +146,9 @@ IN: bootstrap.x86
     jit-load-context
     jit-restore-context
 
+    ! clear the fault flag
+    vm-reg vm-fault-flag-offset [+] 0 MOV
+
     ! Windows-specific setup
     ctx-reg jit-update-seh
 
@@ -209,7 +217,7 @@ IN: bootstrap.x86
 \ lazy-jit-compile define-combinator-primitive
 
 [
-    temp1 HEX: ffffffff CMP f rc-absolute-cell rel-literal
+    temp1 0xffffffff CMP f rc-absolute-cell rel-literal
 ] pic-check-tuple jit-define
 
 ! Inline cache miss entry points
@@ -390,8 +398,9 @@ IN: bootstrap.x86
     EAX EDX [] MOV
     jit-jump-quot ;
 
-: jit-safepoint ( -- )
-    0 EAX MOVABS rc-absolute rel-safepoint ;
+[
+    0 EAX MOVABS rc-absolute rel-safepoint
+] \ jit-safepoint jit-define
 
 [
     jit-start-context-and-delete