diff options
author | Mike Pall <mike> | 2011-07-03 15:15:11 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2011-07-03 15:19:34 +0200 |
commit | 0239a56d373fb280f0c27ec5b700a26ed582d096 (patch) | |
tree | 4a4516fad446522abe4d792afb68fbf8f6fb1a5f /src | |
parent | 161f1a5eb00ee58cc00834c031e95ffc8d3dfead (diff) | |
download | luajit-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/Makefile | 14 | ||||
-rw-r--r-- | src/buildvm.c | 3 | ||||
-rw-r--r-- | src/buildvm_ppc.dasc | 114 | ||||
-rw-r--r-- | src/buildvm_ppc.h | 1 | ||||
-rw-r--r-- | src/lj_arch.h | 14 | ||||
-rw-r--r-- | src/lj_frame.h | 16 |
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 | |||
52 | CCOPT_X86= -march=i686 | 52 | CCOPT_X86= -march=i686 |
53 | CCOPT_X64= | 53 | CCOPT_X64= |
54 | CCOPT_ARM= | 54 | CCOPT_ARM= |
55 | CCOPT_PPC= | ||
55 | CCOPT_PPCSPE= | 56 | CCOPT_PPCSPE= |
56 | # | 57 | # |
57 | CCDEBUG= | 58 | CCDEBUG= |
@@ -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) |
230 | else | 231 | else |
232 | ifneq (,$(findstring LJ_TARGET_PPC ,$(TARGET_TESTARCH))) | ||
233 | TARGET_CCARCH= ppc | ||
234 | TARGET_XCFLAGS+= $(CCOPT_PPC) | ||
235 | else | ||
231 | ifneq (,$(findstring LJ_TARGET_PPCSPE ,$(TARGET_TESTARCH))) | 236 | ifneq (,$(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 | |||
237 | endif | 242 | endif |
238 | endif | 243 | endif |
239 | endif | 244 | endif |
245 | endif | ||
240 | 246 | ||
241 | ifneq (,$(PREFIX)) | 247 | ifneq (,$(PREFIX)) |
242 | ifneq (/usr/local,$(PREFIX)) | 248 | ifneq (/usr/local,$(PREFIX)) |
@@ -341,6 +347,7 @@ DASM_FLAGS_X86= | |||
341 | DASM_FLAGS_X64= -D X64 | 347 | DASM_FLAGS_X64= -D X64 |
342 | DASM_FLAGS_X64WIN= -D X64 -D X64WIN | 348 | DASM_FLAGS_X64WIN= -D X64 -D X64WIN |
343 | DASM_FLAGS_ARM= | 349 | DASM_FLAGS_ARM= |
350 | DASM_FLAGS_PPC= | ||
344 | DASM_FLAGS_PPCSPE= | 351 | DASM_FLAGS_PPCSPE= |
345 | 352 | ||
346 | BUILDVM_O= buildvm.o buildvm_asm.o buildvm_peobj.o buildvm_lib.o buildvm_fold.o | 353 | BUILDVM_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) | |||
387 | ALL_HDRGEN= lj_bcdef.h lj_ffdef.h lj_libdef.h lj_recdef.h lj_folddef.h | 394 | ALL_HDRGEN= lj_bcdef.h lj_ffdef.h lj_libdef.h lj_recdef.h lj_folddef.h |
388 | ALL_GEN= $(LJVM_S) $(ALL_HDRGEN) $(LIB_VMDEFP) | 395 | ALL_GEN= $(LJVM_S) $(ALL_HDRGEN) $(LIB_VMDEFP) |
389 | ALL_DYNGEN= buildvm_x86.h buildvm_x64.h buildvm_x64win.h buildvm_arm.h \ | 396 | ALL_DYNGEN= buildvm_x86.h buildvm_x64.h buildvm_x64win.h buildvm_arm.h \ |
390 | buildvm_ppcspe.h | 397 | buildvm_ppc.h buildvm_ppcspe.h |
391 | WIN_RM= *.obj *.lib *.exp *.dll *.exe *.manifest *.pdb *.ilk | 398 | WIN_RM= *.obj *.lib *.exp *.dll *.exe *.manifest *.pdb *.ilk |
392 | ALL_RM= $(ALL_T) $(ALL_GEN) *.o $(WIN_RM) | 399 | ALL_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 | ||
483 | depend: | 491 | depend: |
@@ -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 | ||
527 | buildvm_ppc.h: buildvm_ppc.dasc | ||
528 | $(E) "DYNASM $@" | ||
529 | $(Q)$(DASM) $(DASM_FLAGS) $(DASM_FLAGS_PPC) -o $@ buildvm_ppc.dasc | ||
530 | |||
519 | buildvm_ppcspe.h: buildvm_ppcspe.dasc | 531 | buildvm_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)) |