aboutsummaryrefslogtreecommitdiff
path: root/src/buildvm_ppc.dasc
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/buildvm_ppc.dasc50
1 files changed, 27 insertions, 23 deletions
diff --git a/src/buildvm_ppc.dasc b/src/buildvm_ppc.dasc
index 8fb77489..ad209ce6 100644
--- a/src/buildvm_ppc.dasc
+++ b/src/buildvm_ppc.dasc
@@ -62,26 +62,28 @@
62|.define CRET2, r4 62|.define CRET2, r4
63| 63|
64|// Stack layout while in interpreter. Must match with lj_frame.h. 64|// Stack layout while in interpreter. Must match with lj_frame.h.
65|.define SAVE_LR, 260(sp) 65|.define SAVE_LR, 276(sp)
66|.define CFRAME_SPACE, 256 // Delta for sp. 66|.define CFRAME_SPACE, 272 // Delta for sp.
67|// Back chain for sp: 256(sp) <-- sp entering interpreter 67|// Back chain for sp: 272(sp) <-- sp entering interpreter
68|.define SAVE_GPR_, 184 // .. 184+18*4: 32 bit GPR saves. 68|.define SAVE_FPR_, 128 // .. 128+18*8: 64 bit FPR saves.
69|.define SAVE_FPR_, 40 // .. 40+18*8: 64 bit FPR saves. 69|.define SAVE_GPR_, 56 // .. 56+18*4: 32 bit GPR saves.
70|.define TONUM_LO, 36(sp) 70|.define SAVE_CR, 52(sp) // 32 bit CR save.
71|.define TONUM_HI, 32(sp) 71|.define SAVE_ERRF, 48(sp) // 32 bit C frame info.
72|.define SAVE_ERRF, 28(sp) // 32 bit C frame info. 72|.define SAVE_NRES, 44(sp)
73|.define SAVE_NRES, 24(sp) 73|.define SAVE_CFRAME, 40(sp)
74|.define SAVE_CFRAME, 20(sp) 74|.define SAVE_L, 36(sp)
75|.define SAVE_L, 16(sp) 75|.define SAVE_PC, 32(sp)
76|.define SAVE_MULTRES, 12(sp) 76|.define SAVE_MULTRES, 28(sp)
77|.define SAVE_PC, 8(sp) 77|.define UNUSED1, 24(sp)
78|.define TMPD_LO, 20(sp)
79|.define TMPD_HI, 16(sp)
80|.define TONUM_LO, 12(sp)
81|.define TONUM_HI, 8(sp)
78|// Next frame lr: 4(sp) 82|// Next frame lr: 4(sp)
79|// Back chain for sp: 0(sp) <-- sp while in interpreter 83|// Back chain for sp: 0(sp) <-- sp while in interpreter
80| 84|
81|.define TMPD_LO, SAVE_MULTRES 85|.define TMPD_BLO, 23(sp)
82|.define TMPD_BLO, 15(sp) 86|.define TMPD, TMPD_HI
83|.define TMPD_HI, SAVE_PC
84|.define TMPD, SAVE_PC
85|.define TONUM_D, TONUM_HI 87|.define TONUM_D, TONUM_HI
86| 88|
87|.macro save_, reg 89|.macro save_, reg
@@ -96,16 +98,16 @@
96|.macro saveregs 98|.macro saveregs
97| stwu sp, -CFRAME_SPACE(sp) 99| stwu sp, -CFRAME_SPACE(sp)
98| save_ 14; save_ 15; save_ 16; save_ 17; save_ 18; save_ 19 100| save_ 14; save_ 15; save_ 16; save_ 17; save_ 18; save_ 19
99| mflr r0 101| mflr r0; mfcr r12
100| save_ 20; save_ 21; save_ 22; save_ 23; save_ 24; save_ 25 102| save_ 20; save_ 21; save_ 22; save_ 23; save_ 24; save_ 25
101| stw r0, SAVE_LR 103| stw r0, SAVE_LR; stw r12, SAVE_CR
102| save_ 26; save_ 27; save_ 28; save_ 29; save_ 30; save_ 31 104| save_ 26; save_ 27; save_ 28; save_ 29; save_ 30; save_ 31
103|.endmacro 105|.endmacro
104| 106|
105|.macro restoreregs 107|.macro restoreregs
106| lwz r0, SAVE_LR 108| lwz r0, SAVE_LR; lwz r12, SAVE_CR
107| rest_ 14; rest_ 15; rest_ 16; rest_ 17; rest_ 18; rest_ 19 109| rest_ 14; rest_ 15; rest_ 16; rest_ 17; rest_ 18; rest_ 19
108| mtlr r0 110| mtlr r0; mtcrf 0x38, r12
109| rest_ 20; rest_ 21; rest_ 22; rest_ 23; rest_ 24; rest_ 25 111| rest_ 20; rest_ 21; rest_ 22; rest_ 23; rest_ 24; rest_ 25
110| rest_ 26; rest_ 27; rest_ 28; rest_ 29; rest_ 30; rest_ 31 112| rest_ 26; rest_ 27; rest_ 28; rest_ 29; rest_ 30; rest_ 31
111| addi sp, sp, CFRAME_SPACE 113| addi sp, sp, CFRAME_SPACE
@@ -4518,7 +4520,8 @@ static void emit_asm_debug(BuildCtx *ctx)
4518 "\t.long .Lbegin\n" 4520 "\t.long .Lbegin\n"
4519 "\t.long %d\n" 4521 "\t.long %d\n"
4520 "\t.byte 0xe\n\t.uleb128 %d\n" 4522 "\t.byte 0xe\n\t.uleb128 %d\n"
4521 "\t.byte 0x11\n\t.uleb128 65\n\t.sleb128 -1\n", 4523 "\t.byte 0x11\n\t.uleb128 65\n\t.sleb128 -1\n"
4524 "\t.byte 0x5\n\t.uleb128 70\n\t.uleb128 55\n",
4522 (int)ctx->codesz, CFRAME_SIZE); 4525 (int)ctx->codesz, CFRAME_SIZE);
4523 for (i = 14; i <= 31; i++) 4526 for (i = 14; i <= 31; i++)
4524 fprintf(ctx->fp, 4527 fprintf(ctx->fp,
@@ -4555,7 +4558,8 @@ static void emit_asm_debug(BuildCtx *ctx)
4555 "\t.long %d\n" 4558 "\t.long %d\n"
4556 "\t.uleb128 0\n" /* augmentation length */ 4559 "\t.uleb128 0\n" /* augmentation length */
4557 "\t.byte 0xe\n\t.uleb128 %d\n" 4560 "\t.byte 0xe\n\t.uleb128 %d\n"
4558 "\t.byte 0x11\n\t.uleb128 65\n\t.sleb128 -1\n", 4561 "\t.byte 0x11\n\t.uleb128 65\n\t.sleb128 -1\n"
4562 "\t.byte 0x5\n\t.uleb128 70\n\t.uleb128 55\n",
4559 (int)ctx->codesz, CFRAME_SIZE); 4563 (int)ctx->codesz, CFRAME_SIZE);
4560 for (i = 14; i <= 31; i++) 4564 for (i = 14; i <= 31; i++)
4561 fprintf(ctx->fp, 4565 fprintf(ctx->fp,