diff options
Diffstat (limited to '')
-rw-r--r-- | src/buildvm_ppc.dasc | 50 |
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, |