aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Pall <mike>2011-03-29 02:18:36 +0200
committerMike Pall <mike>2011-03-29 02:18:36 +0200
commit98e3c8a8ff03a9919cd4c21ce5a3d077821b28c2 (patch)
treec72b6dd6c1e2be9d14cc5d0a8effbf6996ecb461
parent4c9a10f3ad9804e8d8ae4d14bf59c0ef4649440e (diff)
downloadluajit-98e3c8a8ff03a9919cd4c21ce5a3d077821b28c2.tar.gz
luajit-98e3c8a8ff03a9919cd4c21ce5a3d077821b28c2.tar.bz2
luajit-98e3c8a8ff03a9919cd4c21ce5a3d077821b28c2.zip
ARM: Add register assignments, type definitions and stack layout.
-rw-r--r--src/buildvm_arm.dasc64
-rw-r--r--src/lj_frame.h13
2 files changed, 70 insertions, 7 deletions
diff --git a/src/buildvm_arm.dasc b/src/buildvm_arm.dasc
index c52cfc6c..9d2efa67 100644
--- a/src/buildvm_arm.dasc
+++ b/src/buildvm_arm.dasc
@@ -15,6 +15,70 @@
15| 15|
16|//----------------------------------------------------------------------- 16|//-----------------------------------------------------------------------
17| 17|
18|// Fixed register assignments for the interpreter.
19|
20|// The following must be C callee-save (but BASE is often refetched).
21|.define BASE, r4 // Base of current Lua stack frame.
22|.define KBASE, r5 // Constants of current Lua function.
23|.define PC, r6 // Next PC.
24|.define DISPATCH, r7 // Opcode dispatch table.
25|.define LREG, r8 // Register holding lua_State (also in SAVE_L).
26|.define MASKR8, r9 // 255*8 constant for fast bytecode decoding.
27|
28|// The following temporaries are not saved across C calls, except for RA/RC.
29|.define RA, r10 // Callee-save.
30|.define RC, r11 // Callee-save.
31|.define RB, r12
32|.define OP, r12 // Overlaps RB, must not be lr.
33|.define INS, lr
34|
35|// Calling conventions. Also used as temporaries.
36|.define CARG1, r0
37|.define CARG2, r1
38|.define CARG3, r2
39|.define CARG4, r3
40|.define CARG12, r0 // For 1st soft-fp double.
41|.define CARG34, r2 // For 2nd soft-fp double.
42|
43|.define CRET1, r0
44|.define CRET2, r1
45|
46|// Stack layout while in interpreter. Must match with lj_frame.h.
47|.define CFRAME_SPACE, #28
48|.define SAVE_ERRF, [sp, #24]
49|.define SAVE_NRES, [sp, #20]
50|.define SAVE_CFRAME, [sp, #16]
51|.define SAVE_L, [sp, #12]
52|.define SAVE_PC, [sp, #8]
53|.define SAVE_MULTRES, [sp, #4]
54|.define ARG5, [sp]
55|
56|.macro saveregs
57| push {r4, r5, r6, r7, r8, r9, r10, r11, lr}
58| sub sp, sp, CFRAME_SPACE
59|.endmacro
60|.macro restoreregs_ret
61| add sp, sp, CFRAME_SPACE
62| pop {r4, r5, r6, r7, r8, r9, r10, r11, pc}
63|.endmacro
64|
65|// Type definitions. Some of these are only used for documentation.
66|.type L, lua_State, LREG
67|.type GL, global_State
68|.type TVALUE, TValue
69|.type GCOBJ, GCobj
70|.type STR, GCstr
71|.type TAB, GCtab
72|.type LFUNC, GCfuncL
73|.type CFUNC, GCfuncC
74|.type PROTO, GCproto
75|.type UPVAL, GCupval
76|.type NODE, Node
77|.type NARGS8, int
78|.type TRACE, GCtrace
79|
80|//-----------------------------------------------------------------------
81|
18|// Trap for not-yet-implemented parts. 82|// Trap for not-yet-implemented parts.
19|.macro NYI; ud; .endmacro 83|.macro NYI; ud; .endmacro
20| 84|
diff --git a/src/lj_frame.h b/src/lj_frame.h
index 21074724..c123353e 100644
--- a/src/lj_frame.h
+++ b/src/lj_frame.h
@@ -91,13 +91,12 @@ enum {
91#define CFRAME_SHIFT_MULTRES 0 91#define CFRAME_SHIFT_MULTRES 0
92#endif 92#endif
93#elif LJ_TARGET_ARM 93#elif LJ_TARGET_ARM
94/* NYI: Dummy definitions for now. */ 94#define CFRAME_OFS_ERRF 24
95#define CFRAME_OFS_ERRF 28 95#define CFRAME_OFS_NRES 20
96#define CFRAME_OFS_NRES 24 96#define CFRAME_OFS_PREV 16
97#define CFRAME_OFS_PREV 20 97#define CFRAME_OFS_L 12
98#define CFRAME_OFS_L 16 98#define CFRAME_OFS_PC 8
99#define CFRAME_OFS_PC 12 99#define CFRAME_OFS_MULTRES 4
100#define CFRAME_OFS_MULTRES 8
101#define CFRAME_SIZE 64 100#define CFRAME_SIZE 64
102#define CFRAME_SIZE_JIT CFRAME_SIZE 101#define CFRAME_SIZE_JIT CFRAME_SIZE
103#define CFRAME_SHIFT_MULTRES 3 102#define CFRAME_SHIFT_MULTRES 3