aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Pall <mike>2011-07-03 15:15:11 +0200
committerMike Pall <mike>2011-07-03 15:19:34 +0200
commit0239a56d373fb280f0c27ec5b700a26ed582d096 (patch)
tree4a4516fad446522abe4d792afb68fbf8f6fb1a5f /src
parent161f1a5eb00ee58cc00834c031e95ffc8d3dfead (diff)
downloadluajit-0239a56d373fb280f0c27ec5b700a26ed582d096.tar.gz
luajit-0239a56d373fb280f0c27ec5b700a26ed582d096.tar.bz2
luajit-0239a56d373fb280f0c27ec5b700a26ed582d096.zip
PPC: Add build rules for PPC interpreter (non-functional, yet).
Diffstat (limited to 'src')
-rw-r--r--src/Makefile14
-rw-r--r--src/buildvm.c3
-rw-r--r--src/buildvm_ppc.dasc114
-rw-r--r--src/buildvm_ppc.h1
-rw-r--r--src/lj_arch.h14
-rw-r--r--src/lj_frame.h16
6 files changed, 87 insertions, 75 deletions
diff --git a/src/Makefile b/src/Makefile
index 5c3e6a89..7976d419 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -52,6 +52,7 @@ CCOPT= -O2 -fomit-frame-pointer
52CCOPT_X86= -march=i686 52CCOPT_X86= -march=i686
53CCOPT_X64= 53CCOPT_X64=
54CCOPT_ARM= 54CCOPT_ARM=
55CCOPT_PPC=
55CCOPT_PPCSPE= 56CCOPT_PPCSPE=
56# 57#
57CCDEBUG= 58CCDEBUG=
@@ -228,6 +229,10 @@ ifneq (,$(findstring LJ_TARGET_ARM ,$(TARGET_TESTARCH)))
228 TARGET_CCARCH= arm 229 TARGET_CCARCH= arm
229 TARGET_XCFLAGS+= $(CCOPT_ARM) 230 TARGET_XCFLAGS+= $(CCOPT_ARM)
230else 231else
232ifneq (,$(findstring LJ_TARGET_PPC ,$(TARGET_TESTARCH)))
233 TARGET_CCARCH= ppc
234 TARGET_XCFLAGS+= $(CCOPT_PPC)
235else
231ifneq (,$(findstring LJ_TARGET_PPCSPE ,$(TARGET_TESTARCH))) 236ifneq (,$(findstring LJ_TARGET_PPCSPE ,$(TARGET_TESTARCH)))
232 TARGET_CCARCH= ppcspe 237 TARGET_CCARCH= ppcspe
233 TARGET_XCFLAGS+= $(CCOPT_PPCSPE) 238 TARGET_XCFLAGS+= $(CCOPT_PPCSPE)
@@ -237,6 +242,7 @@ endif
237endif 242endif
238endif 243endif
239endif 244endif
245endif
240 246
241ifneq (,$(PREFIX)) 247ifneq (,$(PREFIX))
242ifneq (/usr/local,$(PREFIX)) 248ifneq (/usr/local,$(PREFIX))
@@ -341,6 +347,7 @@ DASM_FLAGS_X86=
341DASM_FLAGS_X64= -D X64 347DASM_FLAGS_X64= -D X64
342DASM_FLAGS_X64WIN= -D X64 -D X64WIN 348DASM_FLAGS_X64WIN= -D X64 -D X64WIN
343DASM_FLAGS_ARM= 349DASM_FLAGS_ARM=
350DASM_FLAGS_PPC=
344DASM_FLAGS_PPCSPE= 351DASM_FLAGS_PPCSPE=
345 352
346BUILDVM_O= buildvm.o buildvm_asm.o buildvm_peobj.o buildvm_lib.o buildvm_fold.o 353BUILDVM_O= buildvm.o buildvm_asm.o buildvm_peobj.o buildvm_lib.o buildvm_fold.o
@@ -387,7 +394,7 @@ ALL_T= $(LUAJIT_T) $(LUAJIT_A) $(LUAJIT_SO) $(BUILDVM_T)
387ALL_HDRGEN= lj_bcdef.h lj_ffdef.h lj_libdef.h lj_recdef.h lj_folddef.h 394ALL_HDRGEN= lj_bcdef.h lj_ffdef.h lj_libdef.h lj_recdef.h lj_folddef.h
388ALL_GEN= $(LJVM_S) $(ALL_HDRGEN) $(LIB_VMDEFP) 395ALL_GEN= $(LJVM_S) $(ALL_HDRGEN) $(LIB_VMDEFP)
389ALL_DYNGEN= buildvm_x86.h buildvm_x64.h buildvm_x64win.h buildvm_arm.h \ 396ALL_DYNGEN= buildvm_x86.h buildvm_x64.h buildvm_x64win.h buildvm_arm.h \
390 buildvm_ppcspe.h 397 buildvm_ppc.h buildvm_ppcspe.h
391WIN_RM= *.obj *.lib *.exp *.dll *.exe *.manifest *.pdb *.ilk 398WIN_RM= *.obj *.lib *.exp *.dll *.exe *.manifest *.pdb *.ilk
392ALL_RM= $(ALL_T) $(ALL_GEN) *.o $(WIN_RM) 399ALL_RM= $(ALL_T) $(ALL_GEN) *.o $(WIN_RM)
393 400
@@ -478,6 +485,7 @@ distclean: clean
478 $(Q)$(DASM) $(DASM_DISTFLAGS) $(DASM_FLAGS_X64) -o buildvm_x64.h buildvm_x86.dasc 485 $(Q)$(DASM) $(DASM_DISTFLAGS) $(DASM_FLAGS_X64) -o buildvm_x64.h buildvm_x86.dasc
479 $(Q)$(DASM) $(DASM_DISTFLAGS) $(DASM_FLAGS_X64WIN) -o buildvm_x64win.h buildvm_x86.dasc 486 $(Q)$(DASM) $(DASM_DISTFLAGS) $(DASM_FLAGS_X64WIN) -o buildvm_x64win.h buildvm_x86.dasc
480 $(Q)$(DASM) $(DASM_DISTFLAGS) $(DASM_FLAGS_ARM) -o buildvm_arm.h buildvm_arm.dasc 487 $(Q)$(DASM) $(DASM_DISTFLAGS) $(DASM_FLAGS_ARM) -o buildvm_arm.h buildvm_arm.dasc
488 $(Q)$(DASM) $(DASM_DISTFLAGS) $(DASM_FLAGS_PPC) -o buildvm_ppc.h buildvm_ppc.dasc
481 $(Q)$(DASM) $(DASM_DISTFLAGS) $(DASM_FLAGS_PPCSPE) -o buildvm_ppcspe.h buildvm_ppcspe.dasc 489 $(Q)$(DASM) $(DASM_DISTFLAGS) $(DASM_FLAGS_PPCSPE) -o buildvm_ppcspe.h buildvm_ppcspe.dasc
482 490
483depend: 491depend:
@@ -516,6 +524,10 @@ buildvm_arm.h: buildvm_arm.dasc
516 $(E) "DYNASM $@" 524 $(E) "DYNASM $@"
517 $(Q)$(DASM) $(DASM_FLAGS) $(DASM_FLAGS_ARM) -o $@ buildvm_arm.dasc 525 $(Q)$(DASM) $(DASM_FLAGS) $(DASM_FLAGS_ARM) -o $@ buildvm_arm.dasc
518 526
527buildvm_ppc.h: buildvm_ppc.dasc
528 $(E) "DYNASM $@"
529 $(Q)$(DASM) $(DASM_FLAGS) $(DASM_FLAGS_PPC) -o $@ buildvm_ppc.dasc
530
519buildvm_ppcspe.h: buildvm_ppcspe.dasc 531buildvm_ppcspe.h: buildvm_ppcspe.dasc
520 $(E) "DYNASM $@" 532 $(E) "DYNASM $@"
521 $(Q)$(DASM) $(DASM_FLAGS) $(DASM_FLAGS_PPCSPE) -o $@ buildvm_ppcspe.dasc 533 $(Q)$(DASM) $(DASM_FLAGS) $(DASM_FLAGS_PPCSPE) -o $@ buildvm_ppcspe.dasc
diff --git a/src/buildvm.c b/src/buildvm.c
index 33f87a4b..122e1262 100644
--- a/src/buildvm.c
+++ b/src/buildvm.c
@@ -67,6 +67,9 @@ static int collect_reloc(BuildCtx *ctx, uint8_t *addr, int idx, int type);
67#elif LJ_TARGET_ARM 67#elif LJ_TARGET_ARM
68#include "../dynasm/dasm_arm.h" 68#include "../dynasm/dasm_arm.h"
69#include "buildvm_arm.h" 69#include "buildvm_arm.h"
70#elif LJ_TARGET_PPC
71#include "../dynasm/dasm_ppc.h"
72#include "buildvm_ppc.h"
70#elif LJ_TARGET_PPCSPE 73#elif LJ_TARGET_PPCSPE
71#include "../dynasm/dasm_ppc.h" 74#include "../dynasm/dasm_ppc.h"
72#include "buildvm_ppcspe.h" 75#include "buildvm_ppcspe.h"
diff --git a/src/buildvm_ppc.dasc b/src/buildvm_ppc.dasc
index 4e316883..2964e0e2 100644
--- a/src/buildvm_ppc.dasc
+++ b/src/buildvm_ppc.dasc
@@ -10,10 +10,6 @@
10|.globalnames globnames 10|.globalnames globnames
11|.externnames extnames 11|.externnames extnames
12| 12|
13|.if not SPE
14|.error "No support for plain PowerPC CPUs (yet)"
15|.endif
16|
17|// Note: The ragged indentation of the instructions is intentional. 13|// Note: The ragged indentation of the instructions is intentional.
18|// The starting columns indicate data dependencies. 14|// The starting columns indicate data dependencies.
19| 15|
@@ -32,14 +28,12 @@
32| 28|
33|// Constants for vectorized type-comparisons (hi+low GPR). C callee-save. 29|// Constants for vectorized type-comparisons (hi+low GPR). C callee-save.
34|.define TISNUM, r22 30|.define TISNUM, r22
35|.if SPE 31|.define TISNIL, r23
36|.define TISSTR, r23 32|.define ZERO, r24
37|.define TISTAB, r24 33|.define TISSTR, r25 // NYI: remove.
38|.define TISFUNC, r25 34|.define TISTAB, r26 // NYI: remove.
39|.define TISNIL, r26 35|.define TISFUNC, r27 // NYI: remove.
40|.define TOBIT, r27 36|.define TOBIT, r28 // NYI: use FP reg.
41|.define ZERO, TOBIT // Zero in lo word.
42|.endif
43| 37|
44|// The following temporaries are not saved across C calls, except for RA. 38|// The following temporaries are not saved across C calls, except for RA.
45|.define RA, r20 // Callee-save. 39|.define RA, r20 // Callee-save.
@@ -63,32 +57,19 @@
63|.define CARG4, r6 // Overlaps TMP3. 57|.define CARG4, r6 // Overlaps TMP3.
64|.define CARG5, r7 // Overlaps INS. 58|.define CARG5, r7 // Overlaps INS.
65| 59|
60|.define CARGF1, f1
61|.define CARGF2, f2
62|
66|.define CRET1, r3 63|.define CRET1, r3
67|.define CRET2, r4 64|.define CRET2, r4
68| 65|
69|// Stack layout while in interpreter. Must match with lj_frame.h. 66|// Stack layout while in interpreter. Must match with lj_frame.h.
70|.if SPE 67|.define SAVE_LR, 260(sp)
71|.define SAVE_LR, 180(sp) 68|.define CFRAME_SPACE, 256 // Delta for sp.
72|.define CFRAME_SPACE, 176 // Delta for sp. 69|// Back chain for sp: 256(sp) <-- sp entering interpreter
73|// Back chain for sp: 176(sp) <-- sp entering interpreter 70|.define SAVE_GPR_, 184 // .. 184+18*4: 32 bit GPR saves.
74|.define SAVE_r31, 168(sp) // 64 bit register saves. 71|.define SAVE_FPR_, 40 // .. 40+18*8: 64 bit FPR saves.
75|.define SAVE_r30, 160(sp) 72|.define SAVE_UNUSED, 32(sp) // 8 unused bytes for alignment.
76|.define SAVE_r29, 152(sp)
77|.define SAVE_r28, 144(sp)
78|.define SAVE_r27, 136(sp)
79|.define SAVE_r26, 128(sp)
80|.define SAVE_r25, 120(sp)
81|.define SAVE_r24, 112(sp)
82|.define SAVE_r23, 104(sp)
83|.define SAVE_r22, 96(sp)
84|.define SAVE_r21, 88(sp)
85|.define SAVE_r20, 80(sp)
86|.define SAVE_r19, 72(sp)
87|.define SAVE_r18, 64(sp)
88|.define SAVE_r17, 56(sp)
89|.define SAVE_r16, 48(sp)
90|.define SAVE_r15, 40(sp)
91|.define SAVE_r14, 32(sp)
92|.define SAVE_ERRF, 28(sp) // 32 bit C frame info. 73|.define SAVE_ERRF, 28(sp) // 32 bit C frame info.
93|.define SAVE_NRES, 24(sp) 74|.define SAVE_NRES, 24(sp)
94|.define SAVE_CFRAME, 20(sp) 75|.define SAVE_CFRAME, 20(sp)
@@ -98,25 +79,30 @@
98|// Next frame lr: 4(sp) 79|// Next frame lr: 4(sp)
99|// Back chain for sp: 0(sp) <-- sp while in interpreter 80|// Back chain for sp: 0(sp) <-- sp while in interpreter
100| 81|
101|.macro save_, reg; evstdd reg, SAVE_..reg; .endmacro 82|.macro save_, reg
102|.macro rest_, reg; evldd reg, SAVE_..reg; .endmacro 83| stw r..reg, SAVE_GPR_+(reg-14)*4(sp)
103|.endif 84| stfd f..reg, SAVE_FPR_+(reg-14)*8(sp)
85|.endmacro
86|.macro rest_, reg
87| lwz r..reg, SAVE_GPR_+(reg-14)*4(sp)
88| lfd f..reg, SAVE_FPR_+(reg-14)*8(sp)
89|.endmacro
104| 90|
105|.macro saveregs 91|.macro saveregs
106| stwu sp, -CFRAME_SPACE(sp) 92| stwu sp, -CFRAME_SPACE(sp)
107| save_ r14; save_ r15; save_ r16; save_ r17; save_ r18; save_ r19 93| save_ 14; save_ 15; save_ 16; save_ 17; save_ 18; save_ 19
108| mflr r0 94| mflr r0
109| save_ r20; save_ r21; save_ r22; save_ r23; save_ r24; save_ r25 95| save_ 20; save_ 21; save_ 22; save_ 23; save_ 24; save_ 25
110| stw r0, SAVE_LR 96| stw r0, SAVE_LR
111| save_ r26; save_ r27; save_ r28; save_ r29; save_ r30; save_ r31 97| save_ 26; save_ 27; save_ 28; save_ 29; save_ 30; save_ 31
112|.endmacro 98|.endmacro
113| 99|
114|.macro restoreregs 100|.macro restoreregs
115| lwz r0, SAVE_LR 101| lwz r0, SAVE_LR
116| rest_ r14; rest_ r15; rest_ r16; rest_ r17; rest_ r18; rest_ r19 102| rest_ 14; rest_ 15; rest_ 16; rest_ 17; rest_ 18; rest_ 19
117| mtlr r0 103| mtlr r0
118| rest_ r20; rest_ r21; rest_ r22; rest_ r23; rest_ r24; rest_ r25 104| rest_ 20; rest_ 21; rest_ 22; rest_ 23; rest_ 24; rest_ 25
119| rest_ r26; rest_ r27; rest_ r28; rest_ r29; rest_ r30; rest_ r31 105| rest_ 26; rest_ 27; rest_ 28; rest_ 29; rest_ 30; rest_ 31
120| addi sp, sp, CFRAME_SPACE 106| addi sp, sp, CFRAME_SPACE
121|.endmacro 107|.endmacro
122| 108|
@@ -231,17 +217,15 @@
231|//----------------------------------------------------------------------- 217|//-----------------------------------------------------------------------
232| 218|
233|// Macros to test operand types. 219|// Macros to test operand types.
234|.if SPE 220|.macro checknum, reg; cmplw reg, TISNUM; .endmacro
235|.macro checknum, reg; evcmpltu reg, TISNUM; .endmacro 221|.macro checkstr, reg; cmpwi reg, LJ_TSTR; .endmacro
236|.macro checkstr, reg; evcmpeq reg, TISSTR; .endmacro 222|.macro checktab, reg; cmpwi reg, LJ_TTAB; .endmacro
237|.macro checktab, reg; evcmpeq reg, TISTAB; .endmacro 223|.macro checkfunc, reg; cmpwi reg, LJ_TFUNC; .endmacro
238|.macro checkfunc, reg; evcmpeq reg, TISFUNC; .endmacro 224|.macro checknil, reg; cmpwi reg, LJ_TNIL; .endmacro
239|.macro checknil, reg; evcmpeq reg, TISNIL; .endmacro 225|.macro checkok, label; beq label; .endmacro // NYI: remove.
240|.macro checkok, label; blt label; .endmacro 226|.macro checkfail, label; bne label; .endmacro // NYI: remove.
241|.macro checkfail, label; bge label; .endmacro 227|.macro checkanyfail, label; bns label; .endmacro // NYI: remove.
242|.macro checkanyfail, label; bns label; .endmacro 228|.macro checkallok, label; bso label; .endmacro // NYI: remove.
243|.macro checkallok, label; bso label; .endmacro
244|.endif
245| 229|
246|.macro branch_RD 230|.macro branch_RD
247| srwi TMP0, RD, 1 231| srwi TMP0, RD, 1
@@ -1067,11 +1051,7 @@ static void build_subroutines(BuildCtx *ctx)
1067 | checknum CARG1 1051 | checknum CARG1
1068 | cmplwi cr1, TMP0, 0 1052 | cmplwi cr1, TMP0, 0
1069 | stw BASE, L->base // Add frame since C call can throw. 1053 | stw BASE, L->base // Add frame since C call can throw.
1070 |.if SPE 1054 | crand 4*cr0+eq, 4*cr0+eq, 4*cr1+eq
1071 | crand 4*cr0+eq, 4*cr0+lt, 4*cr1+eq
1072 |.else
1073 |.error "NYI"
1074 |.endif
1075 | stw PC, SAVE_PC // Redundant (but a defined value). 1055 | stw PC, SAVE_PC // Redundant (but a defined value).
1076 | bne ->fff_fallback 1056 | bne ->fff_fallback
1077 | ffgccheck 1057 | ffgccheck
@@ -3672,14 +3652,10 @@ static void emit_asm_debug(BuildCtx *ctx)
3672 "\t.byte 0x11\n\t.uleb128 65\n\t.sleb128 -1\n", 3652 "\t.byte 0x11\n\t.uleb128 65\n\t.sleb128 -1\n",
3673 (int)ctx->codesz, CFRAME_SIZE); 3653 (int)ctx->codesz, CFRAME_SIZE);
3674 for (i = 14; i <= 31; i++) 3654 for (i = 14; i <= 31; i++)
3675#if LJ_TARGET_PPCSPE
3676 fprintf(ctx->fp, 3655 fprintf(ctx->fp,
3677 "\t.byte %d\n\t.uleb128 %d\n" 3656 "\t.byte %d\n\t.uleb128 %d\n"
3678 "\t.byte 5\n\t.uleb128 %d\n\t.uleb128 %d\n", 3657 "\t.byte %d\n\t.uleb128 %d\n",
3679 0x80+i, 1+2*(31-i), 1200+i, 2+2*(31-i)); 3658 0x80+i, 37+(31-i), 0x80+32+i, 2+2*(31-i));
3680#else
3681#error "missing frame info for saved registers"
3682#endif
3683 fprintf(ctx->fp, 3659 fprintf(ctx->fp,
3684 "\t.align 2\n" 3660 "\t.align 2\n"
3685 ".LEFDE0:\n\n"); 3661 ".LEFDE0:\n\n");
@@ -3713,14 +3689,10 @@ static void emit_asm_debug(BuildCtx *ctx)
3713 "\t.byte 0x11\n\t.uleb128 65\n\t.sleb128 -1\n", 3689 "\t.byte 0x11\n\t.uleb128 65\n\t.sleb128 -1\n",
3714 (int)ctx->codesz, CFRAME_SIZE); 3690 (int)ctx->codesz, CFRAME_SIZE);
3715 for (i = 14; i <= 31; i++) 3691 for (i = 14; i <= 31; i++)
3716#if LJ_TARGET_PPCSPE
3717 fprintf(ctx->fp, 3692 fprintf(ctx->fp,
3718 "\t.byte %d\n\t.uleb128 %d\n" 3693 "\t.byte %d\n\t.uleb128 %d\n"
3719 "\t.byte 5\n\t.uleb128 %d\n\t.uleb128 %d\n", 3694 "\t.byte %d\n\t.uleb128 %d\n",
3720 0x80+i, 1+2*(31-i), 1200+i, 2+2*(31-i)); 3695 0x80+i, 37+(31-i), 0x80+32+i, 2+2*(31-i));
3721#else
3722#error "missing frame info for saved registers"
3723#endif
3724 fprintf(ctx->fp, 3696 fprintf(ctx->fp,
3725 "\t.align 2\n" 3697 "\t.align 2\n"
3726 ".LEFDE1:\n\n"); 3698 ".LEFDE1:\n\n");
diff --git a/src/buildvm_ppc.h b/src/buildvm_ppc.h
new file mode 100644
index 00000000..0a33c11c
--- /dev/null
+++ b/src/buildvm_ppc.h
@@ -0,0 +1 @@
/* Placeholder file. */
diff --git a/src/lj_arch.h b/src/lj_arch.h
index fff40838..17b766f8 100644
--- a/src/lj_arch.h
+++ b/src/lj_arch.h
@@ -147,6 +147,20 @@
147 147
148#elif LUAJIT_TARGET == LUAJIT_ARCH_PPC 148#elif LUAJIT_TARGET == LUAJIT_ARCH_PPC
149 149
150#define LJ_ARCH_NAME "ppc"
151#define LJ_ARCH_BITS 32
152#define LJ_ARCH_ENDIAN LUAJIT_BE
153#define LJ_ARCH_HASFPU 1
154#define LJ_TARGET_PPC 1
155#define LJ_TARGET_EHRETREG 3
156#define LJ_TARGET_JUMPRANGE 25 /* +-2^25 = +-32MB */
157#define LJ_TARGET_MASKSHIFT 0
158#define LJ_TARGET_MASKROT 1
159#define LJ_TARGET_UNIFYROT 1 /* Want only IR_BROL. */
160#define LJ_ARCH_DUALNUM 1
161#define LJ_ARCH_NOFFI 1 /* NYI: comparisons, calls. */
162#define LJ_ARCH_NOJIT 1
163
150#error "No support for plain PowerPC CPUs (yet)" 164#error "No support for plain PowerPC CPUs (yet)"
151 165
152#elif LUAJIT_TARGET == LUAJIT_ARCH_PPCSPE 166#elif LUAJIT_TARGET == LUAJIT_ARCH_PPCSPE
diff --git a/src/lj_frame.h b/src/lj_frame.h
index 4a2a767a..f09b73d0 100644
--- a/src/lj_frame.h
+++ b/src/lj_frame.h
@@ -67,7 +67,6 @@ enum {
67#define CFRAME_OFS_PC (6*4) 67#define CFRAME_OFS_PC (6*4)
68#define CFRAME_OFS_MULTRES (5*4) 68#define CFRAME_OFS_MULTRES (5*4)
69#define CFRAME_SIZE (12*4) 69#define CFRAME_SIZE (12*4)
70#define CFRAME_SIZE_JIT CFRAME_SIZE
71#define CFRAME_SHIFT_MULTRES 0 70#define CFRAME_SHIFT_MULTRES 0
72#elif LJ_TARGET_X64 71#elif LJ_TARGET_X64
73#if LJ_ABI_WIN 72#if LJ_ABI_WIN
@@ -99,7 +98,15 @@ enum {
99#define CFRAME_OFS_PC 8 98#define CFRAME_OFS_PC 8
100#define CFRAME_OFS_MULTRES 4 99#define CFRAME_OFS_MULTRES 4
101#define CFRAME_SIZE 64 100#define CFRAME_SIZE 64
102#define CFRAME_SIZE_JIT CFRAME_SIZE 101#define CFRAME_SHIFT_MULTRES 3
102#elif LJ_TARGET_PPC
103#define CFRAME_OFS_ERRF 28
104#define CFRAME_OFS_NRES 24
105#define CFRAME_OFS_PREV 20
106#define CFRAME_OFS_L 16
107#define CFRAME_OFS_PC 12
108#define CFRAME_OFS_MULTRES 8
109#define CFRAME_SIZE 256
103#define CFRAME_SHIFT_MULTRES 3 110#define CFRAME_SHIFT_MULTRES 3
104#elif LJ_TARGET_PPCSPE 111#elif LJ_TARGET_PPCSPE
105#define CFRAME_OFS_ERRF 28 112#define CFRAME_OFS_ERRF 28
@@ -109,12 +116,15 @@ enum {
109#define CFRAME_OFS_PC 12 116#define CFRAME_OFS_PC 12
110#define CFRAME_OFS_MULTRES 8 117#define CFRAME_OFS_MULTRES 8
111#define CFRAME_SIZE 176 118#define CFRAME_SIZE 176
112#define CFRAME_SIZE_JIT CFRAME_SIZE
113#define CFRAME_SHIFT_MULTRES 3 119#define CFRAME_SHIFT_MULTRES 3
114#else 120#else
115#error "Missing CFRAME_* definitions for this architecture" 121#error "Missing CFRAME_* definitions for this architecture"
116#endif 122#endif
117 123
124#ifndef CFRAME_SIZE_JIT
125#define CFRAME_SIZE_JIT CFRAME_SIZE
126#endif
127
118#define CFRAME_RESUME 1 128#define CFRAME_RESUME 1
119#define CFRAME_UNWIND_FF 2 /* Only used in unwinder. */ 129#define CFRAME_UNWIND_FF 2 /* Only used in unwinder. */
120#define CFRAME_RAWMASK (~(intptr_t)(CFRAME_RESUME|CFRAME_UNWIND_FF)) 130#define CFRAME_RAWMASK (~(intptr_t)(CFRAME_RESUME|CFRAME_UNWIND_FF))