]> gitweb.factorcode.org Git - factor.git/commitdiff
bootstrap.x86: fix assembler code bug in fixnum*
authorBjörn Lindqvist <bjourne@gmail.com>
Mon, 25 May 2015 13:04:33 +0000 (15:04 +0200)
committerDoug Coleman <doug.coleman@gmail.com>
Mon, 25 May 2015 15:42:16 +0000 (08:42 -0700)
Now the operands are kept in EBP and ECX and the vm-reg (EBX) is not
used unnecessarily

basis/bootstrap/assembler/x86.32.factor

index 884ee7c957c845e66d3c42d330ef0d7d25c21cee..6e48bed5ba5c3253aadbde435d0095b098e314f0 100644 (file)
@@ -104,7 +104,7 @@ IN: bootstrap.x86
 ] \ c-to-factor define-sub-primitive
 
 : signal-handler-save-regs ( -- regs )
-    { EAX ECX EDX EBX EBP ESI EDI } ;
+    { EAX EBX ECX EDX EBP EDI ESI } ;
 
 [
     EAX ds-reg [] MOV
@@ -244,18 +244,17 @@ IN: bootstrap.x86
     ds-reg 4 SUB
     jit-load-vm
     jit-save-context
-    EBX ds-reg [] MOV
-    EAX EBX MOV
+    ECX ds-reg [] MOV
+    EAX ECX MOV
     EBP ds-reg 4 [+] MOV
     EBP tag-bits get SAR
+    ! clobbers EDX
     EBP IMUL
     ds-reg [] EAX MOV
     [ JNO ]
     [
-        EBX tag-bits get SAR
-        jit-load-vm
-
-        EBX EBP vm-reg "overflow_fixnum_multiply" jit-call-3arg
+        ECX tag-bits get SAR
+        ECX EBP vm-reg "overflow_fixnum_multiply" jit-call-3arg
     ]
     jit-conditional
 ] \ fixnum* define-sub-primitive