]> gitweb.factorcode.org Git - factor.git/commitdiff
cpu.ppc: stick old stack pointer in a register for use by callbacks
authorSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Fri, 2 Apr 2010 02:39:46 +0000 (22:39 -0400)
committerSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Fri, 2 Apr 2010 02:39:46 +0000 (22:39 -0400)
basis/cpu/ppc/bootstrap.factor

index 83be0150d87d1dea5c02f0b790b1df5c8995d5eb..f7a1917d0e9fb7eafa0e5fb81f94a79a49bf2449 100644 (file)
@@ -76,9 +76,12 @@ CONSTANT: nv-reg 17
     432 save-at ;\r
 \r
 [\r
+    ! Save old stack pointer\r
+    11 1 MR\r
+\r
     ! Create stack frame\r
     0 MFLR\r
-    1 1 callback-frame-size neg STWU\r
+    1 1 callback-frame-size SUBI\r
     0 1 callback-frame-size lr-save + STW\r
 \r
     ! Save all non-volatile registers\r
@@ -86,6 +89,10 @@ CONSTANT: nv-reg 17
     nv-fp-regs [ 8 * 80 + save-fp ] each-index\r
     nv-vec-regs [ 16 * 224 + save-vec ] each-index\r
 \r
+    ! Stick old stack pointer in a non-volatile register so that\r
+    ! callbacks can access their arguments\r
+    nv-reg 11 MR\r
+\r
     ! Load VM into vm-reg\r
     0 vm-reg LOAD32 rc-absolute-ppc-2/2 rt-vm jit-rel\r
 \r
@@ -126,7 +133,7 @@ CONSTANT: nv-reg 17
 \r
     ! Tear down stack frame and return\r
     0 1 callback-frame-size lr-save + LWZ\r
-    1 1 0 LWZ\r
+    1 1 callback-frame-size ADDI\r
     0 MTLR\r
     BLR\r
 ] callback-stub jit-define\r