diff options
Diffstat (limited to '')
-rw-r--r-- | src/buildvm_ppcspe.dasc | 58 |
1 files changed, 31 insertions, 27 deletions
diff --git a/src/buildvm_ppcspe.dasc b/src/buildvm_ppcspe.dasc index 5d85961b..92914f98 100644 --- a/src/buildvm_ppcspe.dasc +++ b/src/buildvm_ppcspe.dasc | |||
@@ -61,27 +61,29 @@ | |||
61 | |.define CRET2, r4 | 61 | |.define CRET2, r4 |
62 | | | 62 | | |
63 | |// Stack layout while in interpreter. Must match with lj_frame.h. | 63 | |// Stack layout while in interpreter. Must match with lj_frame.h. |
64 | |.define SAVE_LR, 180(sp) | 64 | |.define SAVE_LR, 188(sp) |
65 | |.define CFRAME_SPACE, 176 // Delta for sp. | 65 | |.define CFRAME_SPACE, 184 // Delta for sp. |
66 | |// Back chain for sp: 176(sp) <-- sp entering interpreter | 66 | |// Back chain for sp: 184(sp) <-- sp entering interpreter |
67 | |.define SAVE_r31, 168(sp) // 64 bit register saves. | 67 | |.define SAVE_r31, 176(sp) // 64 bit register saves. |
68 | |.define SAVE_r30, 160(sp) | 68 | |.define SAVE_r30, 168(sp) |
69 | |.define SAVE_r29, 152(sp) | 69 | |.define SAVE_r29, 160(sp) |
70 | |.define SAVE_r28, 144(sp) | 70 | |.define SAVE_r28, 152(sp) |
71 | |.define SAVE_r27, 136(sp) | 71 | |.define SAVE_r27, 144(sp) |
72 | |.define SAVE_r26, 128(sp) | 72 | |.define SAVE_r26, 136(sp) |
73 | |.define SAVE_r25, 120(sp) | 73 | |.define SAVE_r25, 128(sp) |
74 | |.define SAVE_r24, 112(sp) | 74 | |.define SAVE_r24, 120(sp) |
75 | |.define SAVE_r23, 104(sp) | 75 | |.define SAVE_r23, 112(sp) |
76 | |.define SAVE_r22, 96(sp) | 76 | |.define SAVE_r22, 104(sp) |
77 | |.define SAVE_r21, 88(sp) | 77 | |.define SAVE_r21, 96(sp) |
78 | |.define SAVE_r20, 80(sp) | 78 | |.define SAVE_r20, 88(sp) |
79 | |.define SAVE_r19, 72(sp) | 79 | |.define SAVE_r19, 80(sp) |
80 | |.define SAVE_r18, 64(sp) | 80 | |.define SAVE_r18, 72(sp) |
81 | |.define SAVE_r17, 56(sp) | 81 | |.define SAVE_r17, 64(sp) |
82 | |.define SAVE_r16, 48(sp) | 82 | |.define SAVE_r16, 56(sp) |
83 | |.define SAVE_r15, 40(sp) | 83 | |.define SAVE_r15, 48(sp) |
84 | |.define SAVE_r14, 32(sp) | 84 | |.define SAVE_r14, 40(sp) |
85 | |.define SAVE_CR, 36(sp) | ||
86 | |.define UNUSED1, 32(sp) | ||
85 | |.define SAVE_ERRF, 28(sp) // 32 bit C frame info. | 87 | |.define SAVE_ERRF, 28(sp) // 32 bit C frame info. |
86 | |.define SAVE_NRES, 24(sp) | 88 | |.define SAVE_NRES, 24(sp) |
87 | |.define SAVE_CFRAME, 20(sp) | 89 | |.define SAVE_CFRAME, 20(sp) |
@@ -97,16 +99,16 @@ | |||
97 | |.macro saveregs | 99 | |.macro saveregs |
98 | | stwu sp, -CFRAME_SPACE(sp) | 100 | | stwu sp, -CFRAME_SPACE(sp) |
99 | | save_ r14; save_ r15; save_ r16; save_ r17; save_ r18; save_ r19 | 101 | | save_ r14; save_ r15; save_ r16; save_ r17; save_ r18; save_ r19 |
100 | | mflr r0 | 102 | | mflr r0; mfcr r12 |
101 | | save_ r20; save_ r21; save_ r22; save_ r23; save_ r24; save_ r25 | 103 | | save_ r20; save_ r21; save_ r22; save_ r23; save_ r24; save_ r25 |
102 | | stw r0, SAVE_LR | 104 | | stw r0, SAVE_LR; stw r12, SAVE_CR |
103 | | save_ r26; save_ r27; save_ r28; save_ r29; save_ r30; save_ r31 | 105 | | save_ r26; save_ r27; save_ r28; save_ r29; save_ r30; save_ r31 |
104 | |.endmacro | 106 | |.endmacro |
105 | | | 107 | | |
106 | |.macro restoreregs | 108 | |.macro restoreregs |
107 | | lwz r0, SAVE_LR | 109 | | lwz r0, SAVE_LR; lwz r12, SAVE_CR |
108 | | rest_ r14; rest_ r15; rest_ r16; rest_ r17; rest_ r18; rest_ r19 | 110 | | rest_ r14; rest_ r15; rest_ r16; rest_ r17; rest_ r18; rest_ r19 |
109 | | mtlr r0 | 111 | | mtlr r0; mtcrf 0x38, r12 |
110 | | rest_ r20; rest_ r21; rest_ r22; rest_ r23; rest_ r24; rest_ r25 | 112 | | rest_ r20; rest_ r21; rest_ r22; rest_ r23; rest_ r24; rest_ r25 |
111 | | rest_ r26; rest_ r27; rest_ r28; rest_ r29; rest_ r30; rest_ r31 | 113 | | rest_ r26; rest_ r27; rest_ r28; rest_ r29; rest_ r30; rest_ r31 |
112 | | addi sp, sp, CFRAME_SPACE | 114 | | addi sp, sp, CFRAME_SPACE |
@@ -3656,7 +3658,8 @@ static void emit_asm_debug(BuildCtx *ctx) | |||
3656 | "\t.long .Lbegin\n" | 3658 | "\t.long .Lbegin\n" |
3657 | "\t.long %d\n" | 3659 | "\t.long %d\n" |
3658 | "\t.byte 0xe\n\t.uleb128 %d\n" | 3660 | "\t.byte 0xe\n\t.uleb128 %d\n" |
3659 | "\t.byte 0x11\n\t.uleb128 65\n\t.sleb128 -1\n", | 3661 | "\t.byte 0x11\n\t.uleb128 65\n\t.sleb128 -1\n" |
3662 | "\t.byte 0x5\n\t.uleb128 70\n\t.sleb128 37\n", | ||
3660 | (int)ctx->codesz, CFRAME_SIZE); | 3663 | (int)ctx->codesz, CFRAME_SIZE); |
3661 | for (i = 14; i <= 31; i++) | 3664 | for (i = 14; i <= 31; i++) |
3662 | fprintf(ctx->fp, | 3665 | fprintf(ctx->fp, |
@@ -3693,7 +3696,8 @@ static void emit_asm_debug(BuildCtx *ctx) | |||
3693 | "\t.long %d\n" | 3696 | "\t.long %d\n" |
3694 | "\t.uleb128 0\n" /* augmentation length */ | 3697 | "\t.uleb128 0\n" /* augmentation length */ |
3695 | "\t.byte 0xe\n\t.uleb128 %d\n" | 3698 | "\t.byte 0xe\n\t.uleb128 %d\n" |
3696 | "\t.byte 0x11\n\t.uleb128 65\n\t.sleb128 -1\n", | 3699 | "\t.byte 0x11\n\t.uleb128 65\n\t.sleb128 -1\n" |
3700 | "\t.byte 0x5\n\t.uleb128 70\n\t.sleb128 37\n", | ||
3697 | (int)ctx->codesz, CFRAME_SIZE); | 3701 | (int)ctx->codesz, CFRAME_SIZE); |
3698 | for (i = 14; i <= 31; i++) | 3702 | for (i = 14; i <= 31; i++) |
3699 | fprintf(ctx->fp, | 3703 | fprintf(ctx->fp, |