: next-save ( -- n ) stack-frame bootstrap-cell - ;\r
: xt-save ( -- n ) stack-frame 2 bootstrap-cells - ;\r
\r
-: jit-conditional* ( test-quot true-quot -- )\r
+: jit-conditional* ( test-quot false-quot -- )\r
[ '[ bootstrap-cell /i 1 + @ ] ] dip jit-conditional ; inline\r
\r
: jit-save-context ( -- )\r
[\r
0 3 LOAD32 rc-absolute-ppc-2/2 rt-literal jit-rel\r
3 ds-reg 4 STWU\r
-] jit-push-immediate jit-define\r
+] jit-push jit-define\r
\r
[\r
jit-save-context\r
- 4 0 swap LOAD32 rc-absolute-ppc-2/2 rt-vm jit-rel\r
- 0 5 LOAD32 rc-absolute-ppc-2/2 rt-primitive jit-rel\r
- 5 MTCTR\r
- BCTR\r
+ 0 3 LOAD32 rc-absolute-ppc-2/2 rt-vm jit-rel\r
+ 0 4 LOAD32 rc-absolute-ppc-2/2 rt-primitive jit-rel\r
+ 4 MTLR\r
+ BLRL\r
] jit-primitive jit-define\r
\r
[ 0 BL rc-relative-ppc-3 rt-xt-pic jit-rel ] jit-word-call jit-define\r
[\r
3 ds-reg 0 LWZ\r
ds-reg dup 4 SUBI\r
- 4 0 swap LOAD32 0 jit-parameter rc-absolute-ppc-2/2 rt-vm jit-rel\r
+ 0 4 LOAD32 0 rc-absolute-ppc-2/2 jit-vm\r
5 3 quot-xt-offset LWZ\r
]\r
[ 5 MTLR BLRL ]\r
: jit-inline-cache-miss ( -- )\r
jit-save-context\r
3 6 MR\r
- 4 0 LOAD32 0 rc-absolute-ppc-2/2 jit-vm\r
- 5 0 LOAD32 "inline_cache_miss" f rc-absolute-ppc-2/2 jit-dlsym ;\r
+ 0 4 LOAD32 0 rc-absolute-ppc-2/2 jit-vm\r
+ 0 5 LOAD32 "inline_cache_miss" f rc-absolute-ppc-2/2 jit-dlsym\r
+ 5 MTLR\r
+ BLRL ;\r
\r
[ jit-load-return-address jit-inline-cache-miss ]\r
-[ 5 MTLR BLRL ]\r
-[ 5 MTCTR BCTR ]\r
+[ 3 MTLR BLRL ]\r
+[ 3 MTCTR BCTR ]\r
\ inline-cache-miss define-sub-primitive*\r
\r
[ jit-inline-cache-miss ]\r
-[ 5 MTLR BLRL ]\r
-[ 5 MTCTR BCTR ]\r
+[ 3 MTLR BLRL ]\r
+[ 3 MTCTR BCTR ]\r
\ inline-cache-miss-tail define-sub-primitive*\r
\r
! Overflowing fixnum arithmetic\r
:: jit-overflow ( insn func -- )\r
jit-save-context\r
- 3 ds-reg 0 LWZ\r
- 4 ds-reg -4 LWZ\r
+ 3 ds-reg -4 LWZ\r
+ 4 ds-reg 0 LWZ\r
ds-reg ds-reg 4 SUBI\r
0 0 LI\r
0 MTXER\r
- 6 3 4 insn call( d a s -- )\r
+ 6 4 3 insn call( d a s -- )\r
6 ds-reg 0 STW\r
[ BNO ]\r
[\r
0 5 LOAD32 0 rc-absolute-ppc-2/2 jit-vm\r
0 6 LOAD32 func f rc-absolute-ppc-2/2 jit-dlsym\r
+ 6 MTLR\r
+ BLRL\r
]\r
- jit-conditional ;\r
+ jit-conditional* ;\r
\r
[ [ ADDO. ] "overflow_fixnum_add" jit-overflow ] \ fixnum+ define-sub-primitive\r
\r
6 MTLR\r
BLRL\r
]\r
- jit-conditional\r
+ jit-conditional*\r
] \ fixnum* define-sub-primitive\r
\r
[ "bootstrap.ppc" forget-vocab ] with-compilation-unit\r