aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Pall <mike>2010-08-27 18:32:24 +0200
committerMike Pall <mike>2010-08-27 18:32:24 +0200
commit9cb5046c3fe8da1437ec8f3bb682930b3692ba0c (patch)
treeaa128bee595c9c815039f69cbba42e24b6241183
parentb3bd9b55e0e1e7dd8037554a6d5d0f0f261cc60d (diff)
downloadluajit-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.html2
-rw-r--r--src/Makefile5
-rw-r--r--src/buildvm_ppc.dasc56
-rw-r--r--src/lj_frame.h9
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
301installing the <tt>mingw32</tt> package and running: 301installing the <tt>mingw32</tt> package and running:
302</p> 302</p>
303<pre class="code"> 303<pre class="code">
304make CC="gcc -m32" CROSS=i586-mingw32msvc- TARGET_SYS=Windows 304make 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
136CCOPTIONS= $(CCDEBUG) $(CCOPT) $(CCWARN) $(XCFLAGS) $(CFLAGS) 137CCOPTIONS= $(CCDEBUG) $(CCOPT) $(CCWARN) $(XCFLAGS) $(CFLAGS)
137LDOPTIONS= $(CCDEBUG) $(LDFLAGS) 138LDOPTIONS= $(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