 [ [ SUBFO. ] "overflow_fixnum_subtract" jit-overflow ] \ fixnum- define-sub-primitive
 
 [
+    ds-reg ds-reg 4 SUBI
     jit-save-context
     3 ds-reg 0 LWZ
     3 3 tag-bits get SRAWI
-    4 ds-reg -4 LWZ
-    ds-reg ds-reg 4 SUBI
+    4 ds-reg 4 LWZ
     0 0 LI
     0 MTXER
     6 3 4 MULLWO.

: jit-save-context ( -- )
    4 vm-reg 0 LWZ
    1 4 0 STW
    ds-reg vm-reg 8 STW
    rs-reg vm-reg 12 STW ;

: jit-load-context ( -- )
    4 vm-reg 0 LWZ
    ds-reg vm-reg 8 LWZ
    rs-reg vm-reg 12 LWZ ;

[
    0 3 LOAD32 rc-absolute-ppc-2/2 rt-literal jit-rel

    rs-reg 3 rs-reg SUBF
] \ drop-locals define-sub-primitive

! Overflowing fixnum arithmetic
:: jit-overflow ( insn func -- )
    ds-reg ds-reg 4 SUBI
    jit-save-context
    3 ds-reg 0 LWZ
    4 ds-reg 4 LWZ
    0 0 LI
    0 MTXER
    6 4 3 insn call( d a s -- )
