]> gitweb.factorcode.org Git - factor.git/commitdiff
Clean up JIT backend a little
authorSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Tue, 9 Dec 2008 23:14:17 +0000 (17:14 -0600)
committerSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Tue, 9 Dec 2008 23:14:17 +0000 (17:14 -0600)
basis/cpu/x86/32/bootstrap.factor
basis/cpu/x86/64/bootstrap.factor
basis/cpu/x86/64/unix/bootstrap.factor
basis/cpu/x86/64/winnt/bootstrap.factor
basis/cpu/x86/bootstrap.factor

index 04bdcca68b8498f392623d5212b33b8182cdaf78..698c3a17668f0e815555593530e6790cbb0fc2a1 100644 (file)
@@ -10,19 +10,19 @@ IN: bootstrap.x86
 : shift-arg ( -- reg ) ECX ;
 : div-arg ( -- reg ) EAX ;
 : mod-arg ( -- reg ) EDX ;
-: arg0 ( -- reg ) EAX ;
-: arg1 ( -- reg ) EDX ;
-: arg2 ( -- reg ) ECX ;
-: temp-reg ( -- reg ) EBX ;
+: temp0 ( -- reg ) EAX ;
+: temp1 ( -- reg ) EDX ;
+: temp2 ( -- reg ) ECX ;
+: temp3 ( -- reg ) EBX ;
 : stack-reg ( -- reg ) ESP ;
 : ds-reg ( -- reg ) ESI ;
 : rs-reg ( -- reg ) EDI ;
-: fixnum>slot@ ( -- ) arg0 1 SAR ;
+: fixnum>slot@ ( -- ) temp0 1 SAR ;
 : rex-length ( -- n ) 0 ;
 
 [
-    arg0 0 [] MOV                              ! load stack_chain
-    arg0 [] stack-reg MOV                      ! save stack pointer
+    temp0 0 [] MOV                              ! load stack_chain
+    temp0 [] stack-reg MOV                      ! save stack pointer
 ] rc-absolute-cell rt-stack-chain 2 jit-save-stack jit-define
 
 [
index 83a72d6dd308ade8135c68a27ce0f883033a6721..efa3de3065a681933ab059358f3903f59d5075e7 100644 (file)
@@ -9,7 +9,10 @@ IN: bootstrap.x86
 : shift-arg ( -- reg ) RCX ;
 : div-arg ( -- reg ) RAX ;
 : mod-arg ( -- reg ) RDX ;
-: temp-reg ( -- reg ) RBX ;
+: temp0 ( -- reg ) RDI ;
+: temp1 ( -- reg ) RSI ;
+: temp2 ( -- reg ) RDX ;
+: temp3 ( -- reg ) RBX ;
 : stack-reg ( -- reg ) RSP ;
 : ds-reg ( -- reg ) R14 ;
 : rs-reg ( -- reg ) R15 ;
@@ -17,14 +20,14 @@ IN: bootstrap.x86
 : rex-length ( -- n ) 1 ;
 
 [
-    arg0 0 MOV                                 ! load stack_chain
-    arg0 arg0 [] MOV
-    arg0 [] stack-reg MOV                      ! save stack pointer
+    temp0 0 MOV                                 ! load stack_chain
+    temp0 temp0 [] MOV
+    temp0 [] stack-reg MOV                      ! save stack pointer
 ] rc-absolute-cell rt-stack-chain 1 rex-length + jit-save-stack jit-define
 
 [
-    arg1 0 MOV                                 ! load XT
-    arg1 JMP                                   ! go
+    temp1 0 MOV                                 ! load XT
+    temp1 JMP                                   ! go
 ] rc-absolute-cell rt-primitive 1 rex-length + jit-primitive jit-define
 
 << "resource:basis/cpu/x86/bootstrap.factor" parse-file parsed >>
index f0ca56da1472bda5f28b42bf614c30b7cf3fe221..a21c4534d25e153ee03382a784ac824f5b3d7fb3 100644 (file)
@@ -5,9 +5,6 @@ cpu.x86.assembler layouts vocabs parser ;
 IN: bootstrap.x86
 
 : stack-frame-size ( -- n ) 4 bootstrap-cells ;
-: arg0 ( -- reg ) RDI ;
-: arg1 ( -- reg ) RSI ;
-: arg2 ( -- reg ) RDX ;
 
 << "resource:basis/cpu/x86/64/bootstrap.factor" parse-file parsed >>
 call
index 459945d82e4d9715c6ede20b493dd9b6165c8aff..709f138463c6bbb1aa5cf008853520171e78ba00 100644 (file)
@@ -5,9 +5,6 @@ cpu.x86.assembler layouts vocabs parser ;
 IN: bootstrap.x86
 
 : stack-frame-size ( -- n ) 8 bootstrap-cells ;
-: arg0 ( -- reg ) RCX ;
-: arg1 ( -- reg ) RDX ;
-: arg2 ( -- reg ) R8 ;
 
 << "resource:basis/cpu/x86/64/bootstrap.factor" parse-file parsed >>
 call
index 597a2c9d319963f2c20730686a5f62c0f1a9a5de..3451da78e1dda774e1f52ad894382d17d4396158 100644 (file)
@@ -12,28 +12,35 @@ big-endian off
 
 [
     ! Load word
-    temp-reg 0 MOV
+    temp0 0 MOV
     ! Bump profiling counter
-    temp-reg profile-count-offset [+] 1 tag-fixnum ADD
+    temp0 profile-count-offset [+] 1 tag-fixnum ADD
     ! Load word->code
-    temp-reg temp-reg word-code-offset [+] MOV
+    temp0 temp0 word-code-offset [+] MOV
     ! Compute word XT
-    temp-reg compiled-header-size ADD
+    temp0 compiled-header-size ADD
     ! Jump to XT
-    temp-reg JMP
+    temp0 JMP
 ] rc-absolute-cell rt-immediate 1 rex-length + jit-profiling jit-define
 
 [
-    temp-reg 0 MOV                             ! load XT
-    stack-frame-size PUSH                      ! save stack frame size
-    temp-reg PUSH                              ! push XT
-    stack-reg stack-frame-size 3 bootstrap-cells - SUB   ! alignment
+    ! load XT
+    temp0 0 MOV
+    ! save stack frame size
+    stack-frame-size PUSH
+    ! push XT
+    temp0 PUSH
+    ! alignment
+    stack-reg stack-frame-size 3 bootstrap-cells - SUB
 ] rc-absolute-cell rt-label 1 rex-length + jit-prolog jit-define
 
 [
-    arg0 0 MOV                                 ! load literal
-    ds-reg bootstrap-cell ADD                  ! increment datastack pointer
-    ds-reg [] arg0 MOV                         ! store literal on datastack
+    ! load literal
+    temp0 0 MOV
+    ! increment datastack pointer
+    ds-reg bootstrap-cell ADD
+    ! store literal on datastack
+    ds-reg [] temp0 MOV
 ] rc-absolute-cell rt-immediate 1 rex-length + jit-push-immediate jit-define
 
 [
@@ -45,73 +52,85 @@ big-endian off
 ] rc-relative rt-xt 1 jit-word-call jit-define
 
 [
-    arg0 ds-reg [] MOV                         ! load boolean
-    ds-reg bootstrap-cell SUB                  ! pop boolean
-    arg0 \ f tag-number CMP                    ! compare boolean with f
-    f JNE                                      ! jump to true branch if not equal
+    ! load boolean
+    temp0 ds-reg [] MOV
+    ! pop boolean
+    ds-reg bootstrap-cell SUB
+    ! compare boolean with f
+    temp0 \ f tag-number CMP
+    ! jump to true branch if not equal
+    f JNE
 ] rc-relative rt-xt 10 rex-length 3 * + jit-if-1 jit-define
 
 [
-    f JMP                                      ! jump to false branch if equal
+    ! jump to false branch if equal
+    f JMP
 ] rc-relative rt-xt 1 jit-if-2 jit-define
 
 [
-    arg1 0 MOV                                 ! load dispatch table
-    arg0 ds-reg [] MOV                         ! load index
-    fixnum>slot@                               ! turn it into an array offset
-    ds-reg bootstrap-cell SUB                  ! pop index
-    arg0 arg1 ADD                              ! compute quotation location
-    arg0 arg0 array-start-offset [+] MOV       ! load quotation
-    arg0 quot-xt-offset [+] JMP                ! execute branch
+    ! load dispatch table
+    temp1 0 MOV
+    ! load index
+    temp0 ds-reg [] MOV
+    ! turn it into an array offset
+    fixnum>slot@
+    ! pop index
+    ds-reg bootstrap-cell SUB
+    ! compute quotation location
+    temp0 temp1 ADD
+    ! load quotation
+    temp0 temp0 array-start-offset [+] MOV
+    ! execute branch
+    temp0 quot-xt-offset [+] JMP
 ] rc-absolute-cell rt-immediate 1 rex-length + jit-dispatch jit-define
 
 : jit->r ( -- )
     rs-reg bootstrap-cell ADD
-    arg0 ds-reg [] MOV
+    temp0 ds-reg [] MOV
     ds-reg bootstrap-cell SUB
-    rs-reg [] arg0 MOV ;
+    rs-reg [] temp0 MOV ;
 
 : jit-2>r ( -- )
     rs-reg 2 bootstrap-cells ADD
-    arg0 ds-reg [] MOV
-    arg1 ds-reg -1 bootstrap-cells [+] MOV
+    temp0 ds-reg [] MOV
+    temp1 ds-reg -1 bootstrap-cells [+] MOV
     ds-reg 2 bootstrap-cells SUB
-    rs-reg [] arg0 MOV
-    rs-reg -1 bootstrap-cells [+] arg1 MOV ;
+    rs-reg [] temp0 MOV
+    rs-reg -1 bootstrap-cells [+] temp1 MOV ;
 
 : jit-3>r ( -- )
     rs-reg 3 bootstrap-cells ADD
-    arg0 ds-reg [] MOV
-    arg1 ds-reg -1 bootstrap-cells [+] MOV
-    arg2 ds-reg -2 bootstrap-cells [+] MOV
+    temp0 ds-reg [] MOV
+    temp1 ds-reg -1 bootstrap-cells [+] MOV
+    temp2 ds-reg -2 bootstrap-cells [+] MOV
     ds-reg 3 bootstrap-cells SUB
-    rs-reg [] arg0 MOV
-    rs-reg -1 bootstrap-cells [+] arg1 MOV
-    rs-reg -2 bootstrap-cells [+] arg2 MOV ;
+    rs-reg [] temp0 MOV
+    rs-reg -1 bootstrap-cells [+] temp1 MOV
+    rs-reg -2 bootstrap-cells [+] temp2 MOV ;
 
 : jit-r> ( -- )
     ds-reg bootstrap-cell ADD
-    arg0 rs-reg [] MOV
+    temp0 rs-reg [] MOV
     rs-reg bootstrap-cell SUB
-    ds-reg [] arg0 MOV ;
+    ds-reg [] temp0 MOV ;
 
 : jit-2r> ( -- )
     ds-reg 2 bootstrap-cells ADD
-    arg0 rs-reg [] MOV
-    arg1 rs-reg -1 bootstrap-cells [+] MOV
+    temp0 rs-reg [] MOV
+    temp1 rs-reg -1 bootstrap-cells [+] MOV
     rs-reg 2 bootstrap-cells SUB
-    ds-reg [] arg0 MOV
-    ds-reg -1 bootstrap-cells [+] arg1 MOV ;
+    ds-reg [] temp0 MOV
+    ds-reg -1 bootstrap-cells [+] temp1 MOV ;
 
 : jit-3r> ( -- )
     ds-reg 3 bootstrap-cells ADD
-    arg0 rs-reg [] MOV
-    arg1 rs-reg -1 bootstrap-cells [+] MOV
-    arg2 rs-reg -2 bootstrap-cells [+] MOV
+    temp0 rs-reg [] MOV
+    temp1 rs-reg -1 bootstrap-cells [+] MOV
+    temp2 rs-reg -2 bootstrap-cells [+] MOV
     rs-reg 3 bootstrap-cells SUB
-    ds-reg [] arg0 MOV
-    ds-reg -1 bootstrap-cells [+] arg1 MOV
-    ds-reg -2 bootstrap-cells [+] arg2 MOV ;
+    ds-reg [] temp0 MOV
+    ds-reg -1 bootstrap-cells [+] temp1 MOV
+    ds-reg -2 bootstrap-cells [+] temp2 MOV ;
 
 [
     jit->r
@@ -126,13 +145,14 @@ big-endian off
 ] rc-relative rt-xt 17 rex-length 6 * + jit-2dip jit-define
 
 [
-    jit-3>r                                    
+    jit-3>r
     f CALL
     jit-3r>
 ] rc-relative rt-xt 23 rex-length 8 * + jit-3dip jit-define
 
 [
-    stack-reg stack-frame-size bootstrap-cell - ADD ! unwind stack frame
+    ! unwind stack frame
+    stack-reg stack-frame-size bootstrap-cell - ADD
 ] f f f jit-epilog jit-define
 
 [ 0 RET ] f f f jit-return jit-define
@@ -141,34 +161,51 @@ big-endian off
 
 ! Quotations and words
 [
-    arg0 ds-reg [] MOV                         ! load from stack
-    ds-reg bootstrap-cell SUB                  ! pop stack
-    arg0 quot-xt-offset [+] JMP                ! call quotation
+    ! load from stack
+    temp0 ds-reg [] MOV
+    ! pop stack
+    ds-reg bootstrap-cell SUB
+    ! call quotation
+    temp0 quot-xt-offset [+] JMP
 ] f f f \ (call) define-sub-primitive
 
 [
-    arg0 ds-reg [] MOV                         ! load from stack
-    ds-reg bootstrap-cell SUB                  ! pop stack
-    arg0 word-xt-offset [+] JMP                ! execute word
+    ! load from stack
+    temp0 ds-reg [] MOV
+    ! pop stack
+    ds-reg bootstrap-cell SUB
+    ! execute word
+    temp0 word-xt-offset [+] JMP
 ] f f f \ (execute) define-sub-primitive
 
 ! Objects
 [
-    arg1 ds-reg [] MOV                         ! load from stack
-    arg1 tag-mask get AND                      ! compute tag
-    arg1 tag-bits get SHL                      ! tag the tag
-    ds-reg [] arg1 MOV                         ! push to stack
+    ! load from stack
+    temp0 ds-reg [] MOV
+    ! compute tag
+    temp0 tag-mask get AND
+    ! tag the tag
+    temp0 tag-bits get SHL
+    ! push to stack
+    ds-reg [] temp0 MOV
 ] f f f \ tag define-sub-primitive
 
 [
-    arg0 ds-reg [] MOV                         ! load slot number
-    ds-reg bootstrap-cell SUB                  ! adjust stack pointer
-    arg1 ds-reg [] MOV                         ! load object
-    fixnum>slot@                               ! turn slot number into offset
-    arg1 tag-bits get SHR                      ! mask off tag
-    arg1 tag-bits get SHL
-    arg0 arg1 arg0 [+] MOV                     ! load slot value
-    ds-reg [] arg0 MOV                         ! push to stack
+    ! load slot number
+    temp0 ds-reg [] MOV
+    ! adjust stack pointer
+    ds-reg bootstrap-cell SUB
+    ! load object
+    temp1 ds-reg [] MOV
+    ! turn slot number into offset
+    fixnum>slot@
+    ! mask off tag
+    temp1 tag-bits get SHR
+    temp1 tag-bits get SHL
+    ! load slot value
+    temp0 temp1 temp0 [+] MOV
+    ! push to stack
+    ds-reg [] temp0 MOV
 ] f f f \ slot define-sub-primitive
 
 ! Shufflers
@@ -185,100 +222,100 @@ big-endian off
 ] f f f \ 3drop define-sub-primitive
 
 [
-    arg0 ds-reg [] MOV
+    temp0 ds-reg [] MOV
     ds-reg bootstrap-cell ADD
-    ds-reg [] arg0 MOV
+    ds-reg [] temp0 MOV
 ] f f f \ dup define-sub-primitive
 
 [
-    arg0 ds-reg [] MOV
-    arg1 ds-reg bootstrap-cell neg [+] MOV
+    temp0 ds-reg [] MOV
+    temp1 ds-reg bootstrap-cell neg [+] MOV
     ds-reg 2 bootstrap-cells ADD
-    ds-reg [] arg0 MOV
-    ds-reg bootstrap-cell neg [+] arg1 MOV
+    ds-reg [] temp0 MOV
+    ds-reg bootstrap-cell neg [+] temp1 MOV
 ] f f f \ 2dup define-sub-primitive
 
 [
-    arg0 ds-reg [] MOV
-    arg1 ds-reg -1 bootstrap-cells [+] MOV
-    temp-reg ds-reg -2 bootstrap-cells [+] MOV
+    temp0 ds-reg [] MOV
+    temp1 ds-reg -1 bootstrap-cells [+] MOV
+    temp3 ds-reg -2 bootstrap-cells [+] MOV
     ds-reg 3 bootstrap-cells ADD
-    ds-reg [] arg0 MOV
-    ds-reg -1 bootstrap-cells [+] arg1 MOV
-    ds-reg -2 bootstrap-cells [+] temp-reg MOV
+    ds-reg [] temp0 MOV
+    ds-reg -1 bootstrap-cells [+] temp1 MOV
+    ds-reg -2 bootstrap-cells [+] temp3 MOV
 ] f f f \ 3dup define-sub-primitive
 
 [
-    arg0 ds-reg [] MOV
+    temp0 ds-reg [] MOV
     ds-reg bootstrap-cell SUB
-    ds-reg [] arg0 MOV
+    ds-reg [] temp0 MOV
 ] f f f \ nip define-sub-primitive
 
 [
-    arg0 ds-reg [] MOV
+    temp0 ds-reg [] MOV
     ds-reg 2 bootstrap-cells SUB
-    ds-reg [] arg0 MOV
+    ds-reg [] temp0 MOV
 ] f f f \ 2nip define-sub-primitive
 
 [
-    arg0 ds-reg -1 bootstrap-cells [+] MOV
+    temp0 ds-reg -1 bootstrap-cells [+] MOV
     ds-reg bootstrap-cell ADD
-    ds-reg [] arg0 MOV
+    ds-reg [] temp0 MOV
 ] f f f \ over define-sub-primitive
 
 [
-    arg0 ds-reg -2 bootstrap-cells [+] MOV
+    temp0 ds-reg -2 bootstrap-cells [+] MOV
     ds-reg bootstrap-cell ADD
-    ds-reg [] arg0 MOV
+    ds-reg [] temp0 MOV
 ] f f f \ pick define-sub-primitive
 
 [
-    arg0 ds-reg [] MOV
-    arg1 ds-reg -1 bootstrap-cells [+] MOV
-    ds-reg [] arg1 MOV
+    temp0 ds-reg [] MOV
+    temp1 ds-reg -1 bootstrap-cells [+] MOV
+    ds-reg [] temp1 MOV
     ds-reg bootstrap-cell ADD
-    ds-reg [] arg0 MOV
+    ds-reg [] temp0 MOV
 ] f f f \ dupd define-sub-primitive
 
 [
-    arg0 ds-reg [] MOV
-    arg1 ds-reg -1 bootstrap-cells [+] MOV
+    temp0 ds-reg [] MOV
+    temp1 ds-reg -1 bootstrap-cells [+] MOV
     ds-reg bootstrap-cell ADD
-    ds-reg [] arg0 MOV
-    ds-reg -1 bootstrap-cells [+] arg1 MOV
-    ds-reg -2 bootstrap-cells [+] arg0 MOV
+    ds-reg [] temp0 MOV
+    ds-reg -1 bootstrap-cells [+] temp1 MOV
+    ds-reg -2 bootstrap-cells [+] temp0 MOV
 ] f f f \ tuck define-sub-primitive
 
 [
-    arg0 ds-reg [] MOV
-    arg1 ds-reg bootstrap-cell neg [+] MOV
-    ds-reg bootstrap-cell neg [+] arg0 MOV
-    ds-reg [] arg1 MOV
+    temp0 ds-reg [] MOV
+    temp1 ds-reg bootstrap-cell neg [+] MOV
+    ds-reg bootstrap-cell neg [+] temp0 MOV
+    ds-reg [] temp1 MOV
 ] f f f \ swap define-sub-primitive
 
 [
-    arg0 ds-reg -1 bootstrap-cells [+] MOV
-    arg1 ds-reg -2 bootstrap-cells [+] MOV
-    ds-reg -2 bootstrap-cells [+] arg0 MOV
-    ds-reg -1 bootstrap-cells [+] arg1 MOV
+    temp0 ds-reg -1 bootstrap-cells [+] MOV
+    temp1 ds-reg -2 bootstrap-cells [+] MOV
+    ds-reg -2 bootstrap-cells [+] temp0 MOV
+    ds-reg -1 bootstrap-cells [+] temp1 MOV
 ] f f f \ swapd define-sub-primitive
 
 [
-    arg0 ds-reg [] MOV
-    arg1 ds-reg -1 bootstrap-cells [+] MOV
-    temp-reg ds-reg -2 bootstrap-cells [+] MOV
-    ds-reg -2 bootstrap-cells [+] arg1 MOV
-    ds-reg -1 bootstrap-cells [+] arg0 MOV
-    ds-reg [] temp-reg MOV
+    temp0 ds-reg [] MOV
+    temp1 ds-reg -1 bootstrap-cells [+] MOV
+    temp3 ds-reg -2 bootstrap-cells [+] MOV
+    ds-reg -2 bootstrap-cells [+] temp1 MOV
+    ds-reg -1 bootstrap-cells [+] temp0 MOV
+    ds-reg [] temp3 MOV
 ] f f f \ rot define-sub-primitive
 
 [
-    arg0 ds-reg [] MOV
-    arg1 ds-reg -1 bootstrap-cells [+] MOV
-    temp-reg ds-reg -2 bootstrap-cells [+] MOV
-    ds-reg -2 bootstrap-cells [+] arg0 MOV
-    ds-reg -1 bootstrap-cells [+] temp-reg MOV
-    ds-reg [] arg1 MOV
+    temp0 ds-reg [] MOV
+    temp1 ds-reg -1 bootstrap-cells [+] MOV
+    temp3 ds-reg -2 bootstrap-cells [+] MOV
+    ds-reg -2 bootstrap-cells [+] temp0 MOV
+    ds-reg -1 bootstrap-cells [+] temp3 MOV
+    ds-reg [] temp1 MOV
 ] f f f \ -rot define-sub-primitive
 
 [ jit->r ] f f f \ >r define-sub-primitive
@@ -287,14 +324,20 @@ big-endian off
 
 ! Comparisons
 : jit-compare ( insn -- )
-    temp-reg 0 MOV                             ! load t
-    arg1 \ f tag-number MOV                    ! load f
-    arg0 ds-reg [] MOV                         ! load first value
-    ds-reg bootstrap-cell SUB                  ! adjust stack pointer
-    ds-reg [] arg0 CMP                         ! compare with second value
-    [ arg1 temp-reg ] dip execute              ! move t if true
-    ds-reg [] arg1 MOV                         ! store
-    ;
+    ! load t
+    temp3 0 MOV
+    ! load f
+    temp1 \ f tag-number MOV
+    ! load first value
+    temp0 ds-reg [] MOV
+    ! adjust stack pointer
+    ds-reg bootstrap-cell SUB
+    ! compare with second value
+    ds-reg [] temp0 CMP
+    ! move t if true
+    [ temp1 temp3 ] dip execute
+    ! store
+    ds-reg [] temp1 MOV ;
 
 : define-jit-compare ( insn word -- )
     [ [ jit-compare ] curry rc-absolute-cell rt-immediate 1 rex-length + ] dip
@@ -308,22 +351,30 @@ big-endian off
 
 ! Math
 : jit-math ( insn -- )
-    arg0 ds-reg [] MOV                         ! load second input
-    ds-reg bootstrap-cell SUB                  ! pop stack
-    [ ds-reg [] arg0 ] dip execute             ! compute result
-    ;
+    ! load second input
+    temp0 ds-reg [] MOV
+    ! pop stack
+    ds-reg bootstrap-cell SUB
+    ! compute result
+    [ ds-reg [] temp0 ] dip execute ;
 
 [ \ ADD jit-math ] f f f \ fixnum+fast define-sub-primitive
 
 [ \ SUB jit-math ] f f f \ fixnum-fast define-sub-primitive
 
 [
-    arg0 ds-reg [] MOV                         ! load second input
-    ds-reg bootstrap-cell SUB                  ! pop stack
-    arg1 ds-reg [] MOV                         ! load first input
-    arg0 tag-bits get SAR                      ! untag second input
-    arg0 arg1 IMUL2                            ! multiply
-    ds-reg [] arg1 MOV                         ! push result
+    ! load second input
+    temp0 ds-reg [] MOV
+    ! pop stack
+    ds-reg bootstrap-cell SUB
+    ! load first input
+    temp1 ds-reg [] MOV
+    ! untag second input
+    temp0 tag-bits get SAR
+    ! multiply
+    temp0 temp1 IMUL2
+    ! push result
+    ds-reg [] temp1 MOV
 ] f f f \ fixnum*fast define-sub-primitive
 
 [ \ AND jit-math ] f f f \ fixnum-bitand define-sub-primitive
@@ -333,75 +384,106 @@ big-endian off
 [ \ XOR jit-math ] f f f \ fixnum-bitxor define-sub-primitive
 
 [
-    ds-reg [] NOT                              ! complement
-    ds-reg [] tag-mask get XOR                 ! clear tag bits
+    ! complement
+    ds-reg [] NOT
+    ! clear tag bits
+    ds-reg [] tag-mask get XOR
 ] f f f \ fixnum-bitnot define-sub-primitive
 
 [
-    shift-arg ds-reg [] MOV                    ! load shift count
-    shift-arg tag-bits get SAR                 ! untag shift count
-    ds-reg bootstrap-cell SUB                  ! adjust stack pointer
-    temp-reg ds-reg [] MOV                     ! load value
-    arg1 temp-reg MOV                          ! make a copy
-    arg1 CL SHL                                ! compute positive shift value in arg1
-    shift-arg NEG                              ! compute negative shift value in arg0
-    temp-reg CL SAR
-    temp-reg tag-mask get bitnot AND
-    shift-arg 0 CMP                            ! if shift count was negative, move arg0 to arg1
-    arg1 temp-reg CMOVGE
-    ds-reg [] arg1 MOV                         ! push to stack
+    ! load shift count
+    shift-arg ds-reg [] MOV
+    ! untag shift count
+    shift-arg tag-bits get SAR
+    ! adjust stack pointer
+    ds-reg bootstrap-cell SUB
+    ! load value
+    temp3 ds-reg [] MOV
+    ! make a copy
+    temp1 temp3 MOV
+    ! compute positive shift value in temp1
+    temp1 CL SHL
+    shift-arg NEG
+    ! compute negative shift value in temp3
+    temp3 CL SAR
+    temp3 tag-mask get bitnot AND
+    shift-arg 0 CMP
+    ! if shift count was negative, move temp0 to temp1
+    temp1 temp3 CMOVGE
+    ! push to stack
+    ds-reg [] temp1 MOV
 ] f f f \ fixnum-shift-fast define-sub-primitive
 
 : jit-fixnum-/mod ( -- )
-    temp-reg ds-reg [] MOV                     ! load second parameter
-    div-arg ds-reg bootstrap-cell neg [+] MOV  ! load first parameter
-    mod-arg div-arg MOV                        ! make a copy
-    mod-arg bootstrap-cell-bits 1- SAR         ! sign-extend
-    temp-reg IDIV ;                            ! divide
+    ! load second parameter
+    temp3 ds-reg [] MOV
+    ! load first parameter
+    div-arg ds-reg bootstrap-cell neg [+] MOV
+    ! make a copy
+    mod-arg div-arg MOV
+    ! sign-extend
+    mod-arg bootstrap-cell-bits 1- SAR
+    ! divide
+    temp3 IDIV ;
 
 [
     jit-fixnum-/mod
-    ds-reg bootstrap-cell SUB                  ! adjust stack pointer
-    ds-reg [] mod-arg MOV                      ! push to stack
+    ! adjust stack pointer
+    ds-reg bootstrap-cell SUB
+    ! push to stack
+    ds-reg [] mod-arg MOV
 ] f f f \ fixnum-mod define-sub-primitive
 
 [
     jit-fixnum-/mod
-    ds-reg bootstrap-cell SUB                  ! adjust stack pointer
-    div-arg tag-bits get SHL                   ! tag it
-    ds-reg [] div-arg MOV                      ! push to stack
+    ! adjust stack pointer
+    ds-reg bootstrap-cell SUB
+    ! tag it
+    div-arg tag-bits get SHL
+    ! push to stack
+    ds-reg [] div-arg MOV
 ] f f f \ fixnum/i-fast define-sub-primitive
 
 [
     jit-fixnum-/mod
-    div-arg tag-bits get SHL                   ! tag it
-    ds-reg [] mod-arg MOV                      ! push to stack
+    ! tag it
+    div-arg tag-bits get SHL
+    ! push to stack
+    ds-reg [] mod-arg MOV
     ds-reg bootstrap-cell neg [+] div-arg MOV
 ] f f f \ fixnum/mod-fast define-sub-primitive
 
 [
-    arg0 ds-reg [] MOV
+    temp0 ds-reg [] MOV
     ds-reg bootstrap-cell SUB
-    arg0 ds-reg [] OR
-    arg0 tag-mask get AND
-    arg0 \ f tag-number MOV
-    arg1 1 tag-fixnum MOV
-    arg0 arg1 CMOVE
-    ds-reg [] arg0 MOV
+    temp0 ds-reg [] OR
+    temp0 tag-mask get AND
+    temp0 \ f tag-number MOV
+    temp1 1 tag-fixnum MOV
+    temp0 temp1 CMOVE
+    ds-reg [] temp0 MOV
 ] f f f \ both-fixnums? define-sub-primitive
 
 [
-    arg0 ds-reg [] MOV                         ! load local number
-    fixnum>slot@                               ! turn local number into offset
-    arg0 rs-reg arg0 [+] MOV                   ! load local value
-    ds-reg [] arg0 MOV                         ! push to stack
+    ! load local number
+    temp0 ds-reg [] MOV
+    ! turn local number into offset
+    fixnum>slot@
+    ! load local value
+    temp0 rs-reg temp0 [+] MOV
+    ! push to stack
+    ds-reg [] temp0 MOV
 ] f f f \ get-local define-sub-primitive
 
 [
-    arg0 ds-reg [] MOV                         ! load local count
-    ds-reg bootstrap-cell SUB                  ! adjust stack pointer
-    fixnum>slot@                               ! turn local number into offset
-    rs-reg arg0 SUB                            ! decrement retain stack pointer
+    ! load local count
+    temp0 ds-reg [] MOV
+    ! adjust stack pointer
+    ds-reg bootstrap-cell SUB
+    ! turn local number into offset
+    fixnum>slot@
+    ! decrement retain stack pointer
+    rs-reg temp0 SUB
 ] f f f \ drop-locals define-sub-primitive
 
 [ "bootstrap.x86" forget-vocab ] with-compilation-unit