diff options
author | Mike Pall <mike> | 2010-08-27 18:32:24 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2010-08-27 18:32:24 +0200 |
commit | 9cb5046c3fe8da1437ec8f3bb682930b3692ba0c (patch) | |
tree | aa128bee595c9c815039f69cbba42e24b6241183 | |
parent | b3bd9b55e0e1e7dd8037554a6d5d0f0f261cc60d (diff) | |
download | luajit-9cb5046c3fe8da1437ec8f3bb682930b3692ba0c.tar.gz luajit-9cb5046c3fe8da1437ec8f3bb682930b3692ba0c.tar.bz2 luajit-9cb5046c3fe8da1437ec8f3bb682930b3692ba0c.zip |
PPC: Add stack frame layout for PPCSPE target.
PPCSPE target compiles now, but will trap for any NYI parts.
Cross-compilation instructions:
make HOST_CC="gcc -m32" CROSS=powerpc-e500v2-linux-gnuspe- TARGET=ppcspe
-rw-r--r-- | doc/install.html | 2 | ||||
-rw-r--r-- | src/Makefile | 5 | ||||
-rw-r--r-- | src/buildvm_ppc.dasc | 56 | ||||
-rw-r--r-- | src/lj_frame.h | 9 |
4 files changed, 69 insertions, 3 deletions
diff --git a/doc/install.html b/doc/install.html index 6e328b79..45925e7a 100644 --- a/doc/install.html +++ b/doc/install.html | |||
@@ -301,7 +301,7 @@ You can cross-compile for a Windows target on Debian/Ubuntu by | |||
301 | installing the <tt>mingw32</tt> package and running: | 301 | installing the <tt>mingw32</tt> package and running: |
302 | </p> | 302 | </p> |
303 | <pre class="code"> | 303 | <pre class="code"> |
304 | make CC="gcc -m32" CROSS=i586-mingw32msvc- TARGET_SYS=Windows | 304 | make HOST_CC="gcc -m32" CROSS=i586-mingw32msvc- TARGET_SYS=Windows |
305 | </pre> | 305 | </pre> |
306 | 306 | ||
307 | <h2>Embedding LuaJIT</h2> | 307 | <h2>Embedding LuaJIT</h2> |
diff --git a/src/Makefile b/src/Makefile index ed1be4ba..ea96e91e 100644 --- a/src/Makefile +++ b/src/Makefile | |||
@@ -130,8 +130,9 @@ BUILDMODE= mixed | |||
130 | # LIBS HOST_LIBS TARGET_LIBS | 130 | # LIBS HOST_LIBS TARGET_LIBS |
131 | # CROSS HOST_SYS TARGET_SYS | 131 | # CROSS HOST_SYS TARGET_SYS |
132 | # | 132 | # |
133 | # Cross-compilation example: | 133 | # Cross-compilation examples: |
134 | # make CC="gcc -m32" CROSS=i586-mingw32msvc- TARGET_SYS=Windows | 134 | # make HOST_CC="gcc -m32" CROSS=i586-mingw32msvc- TARGET_SYS=Windows |
135 | # make HOST_CC="gcc -m32" CROSS=powerpc-e500v2-linux-gnuspe- TARGET=ppcspe | ||
135 | 136 | ||
136 | CCOPTIONS= $(CCDEBUG) $(CCOPT) $(CCWARN) $(XCFLAGS) $(CFLAGS) | 137 | CCOPTIONS= $(CCDEBUG) $(CCOPT) $(CCWARN) $(XCFLAGS) $(CFLAGS) |
137 | LDOPTIONS= $(CCDEBUG) $(LDFLAGS) | 138 | LDOPTIONS= $(CCDEBUG) $(LDFLAGS) |
diff --git a/src/buildvm_ppc.dasc b/src/buildvm_ppc.dasc index 0e83e305..c2363d97 100644 --- a/src/buildvm_ppc.dasc +++ b/src/buildvm_ppc.dasc | |||
@@ -16,6 +16,62 @@ | |||
16 | | | 16 | | |
17 | |//----------------------------------------------------------------------- | 17 | |//----------------------------------------------------------------------- |
18 | | | 18 | | |
19 | |// Stack layout while in interpreter. Must match with lj_frame.h. | ||
20 | |.if SPE | ||
21 | |.define SAVE_LR, 180(sp) | ||
22 | |.define CFRAME_SPACE, 176 // Delta for sp. | ||
23 | |// Back chain for sp: 176(sp) <-- sp entering interpreter | ||
24 | |.define SAVE_r31, 168(sp) // 64 bit register saves. | ||
25 | |.define SAVE_r30, 160(sp) | ||
26 | |.define SAVE_r29, 152(sp) | ||
27 | |.define SAVE_r28, 144(sp) | ||
28 | |.define SAVE_r27, 136(sp) | ||
29 | |.define SAVE_r26, 128(sp) | ||
30 | |.define SAVE_r25, 120(sp) | ||
31 | |.define SAVE_r24, 112(sp) | ||
32 | |.define SAVE_r23, 104(sp) | ||
33 | |.define SAVE_r22, 96(sp) | ||
34 | |.define SAVE_r21, 88(sp) | ||
35 | |.define SAVE_r20, 80(sp) | ||
36 | |.define SAVE_r19, 72(sp) | ||
37 | |.define SAVE_r18, 64(sp) | ||
38 | |.define SAVE_r17, 56(sp) | ||
39 | |.define SAVE_r16, 48(sp) | ||
40 | |.define SAVE_r15, 40(sp) | ||
41 | |.define SAVE_r14, 32(sp) | ||
42 | |.define SAVE_ERRF, 28(sp) // 32 bit C frame info. | ||
43 | |.define SAVE_NRES, 24(sp) | ||
44 | |.define SAVE_CFRAME, 20(sp) | ||
45 | |.define SAVE_L, 16(sp) | ||
46 | |.define SAVE_PC, 12(sp) | ||
47 | |.define SAVE_MULTRES, 8(sp) | ||
48 | |// Next frame lr: 4(sp) | ||
49 | |// Back chain for sp: 0(sp) <-- sp while in interpreter | ||
50 | | | ||
51 | |.macro save_, reg; evstdd reg, SAVE_..reg; .endmacro | ||
52 | |.macro rest_, reg; evldd reg, SAVE_..reg; .endmacro | ||
53 | |.endif | ||
54 | | | ||
55 | |.macro saveregs | ||
56 | | stwu sp, -CFRAME_SPACE(sp) | ||
57 | | save_ r14; save_ r15; save_ r16; save_ r17; save_ r18; save_ r19 | ||
58 | | mflr r0 | ||
59 | | save_ r20; save_ r21; save_ r22; save_ r23; save_ r24; save_ r25 | ||
60 | | stw r0, SAVE_LR | ||
61 | | save_ r26; save_ r27; save_ r28; save_ r29; save_ r30; save_ r31 | ||
62 | |.endmacro | ||
63 | | | ||
64 | |.macro restoreregs | ||
65 | | lwz r0, SAVE_LR | ||
66 | | rest_ r14; rest_ r15; rest_ r16; rest_ r17; rest_ r18; rest_ r19 | ||
67 | | mtlr r0 | ||
68 | | rest_ r20; rest_ r21; rest_ r22; rest_ r23; rest_ r24; rest_ r25 | ||
69 | | rest_ r26; rest_ r27; rest_ r28; rest_ r29; rest_ r30; rest_ r31 | ||
70 | | addi sp, sp, CFRAME_SPACE | ||
71 | |.endmacro | ||
72 | | | ||
73 | |//----------------------------------------------------------------------- | ||
74 | | | ||
19 | |// Trap for not-yet-implemented parts. | 75 | |// Trap for not-yet-implemented parts. |
20 | |.macro NYI; tw 4, sp, sp; .endmacro | 76 | |.macro NYI; tw 4, sp, sp; .endmacro |
21 | | | 77 | | |
diff --git a/src/lj_frame.h b/src/lj_frame.h index 549784c6..da33420b 100644 --- a/src/lj_frame.h +++ b/src/lj_frame.h | |||
@@ -87,6 +87,15 @@ enum { | |||
87 | #define CFRAME_SIZE (10*8) | 87 | #define CFRAME_SIZE (10*8) |
88 | #define CFRAME_SIZE_JIT (CFRAME_SIZE + 16) | 88 | #define CFRAME_SIZE_JIT (CFRAME_SIZE + 16) |
89 | #endif | 89 | #endif |
90 | #elif LJ_TARGET_PPCSPE | ||
91 | #define CFRAME_OFS_ERRF 28 | ||
92 | #define CFRAME_OFS_NRES 24 | ||
93 | #define CFRAME_OFS_PREV 20 | ||
94 | #define CFRAME_OFS_L 16 | ||
95 | #define CFRAME_OFS_PC 12 | ||
96 | #define CFRAME_OFS_MULTRES 8 | ||
97 | #define CFRAME_SIZE 176 | ||
98 | #define CFRAME_SIZE_JIT CFRAME_SIZE | ||
90 | #else | 99 | #else |
91 | #error "Missing CFRAME_* definitions for this architecture" | 100 | #error "Missing CFRAME_* definitions for this architecture" |
92 | #endif | 101 | #endif |