diff options
author | Mike Pall <mike> | 2010-08-31 00:04:32 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2010-08-31 00:04:32 +0200 |
commit | c7f91f8cd1c64031d6f74e957f6ad72f0bc8cf10 (patch) | |
tree | 2e6c214d2fe5d010afbc5cbef2251cad221c429e /src | |
parent | e1efd0d871e816bb6d2851b5941ba3b4b3d1d01b (diff) | |
download | luajit-c7f91f8cd1c64031d6f74e957f6ad72f0bc8cf10.tar.gz luajit-c7f91f8cd1c64031d6f74e957f6ad72f0bc8cf10.tar.bz2 luajit-c7f91f8cd1c64031d6f74e957f6ad72f0bc8cf10.zip |
PPC: Add register assignments and type definitions.
Diffstat (limited to 'src')
-rw-r--r-- | src/buildvm_ppc.dasc | 62 | ||||
-rw-r--r-- | src/buildvm_ppcspe.h | 13 |
2 files changed, 75 insertions, 0 deletions
diff --git a/src/buildvm_ppc.dasc b/src/buildvm_ppc.dasc index c2363d97..c76c425d 100644 --- a/src/buildvm_ppc.dasc +++ b/src/buildvm_ppc.dasc | |||
@@ -14,8 +14,55 @@ | |||
14 | |.error "No support for plain PowerPC CPUs (yet)" | 14 | |.error "No support for plain PowerPC CPUs (yet)" |
15 | |.endif | 15 | |.endif |
16 | | | 16 | | |
17 | |// Note: The ragged indentation of the instructions is intentional. | ||
18 | |// The starting columns indicate data dependencies. | ||
19 | | | ||
17 | |//----------------------------------------------------------------------- | 20 | |//----------------------------------------------------------------------- |
18 | | | 21 | | |
22 | |// Fixed register assignments for the interpreter. | ||
23 | |// Don't use: r1 = sp, r2 and r13 = reserved and/or small data area ptr | ||
24 | | | ||
25 | |// The following must be C callee-save (but BASE is often refetched). | ||
26 | |.define BASE, r14 // Base of current Lua stack frame. | ||
27 | |.define KBASE, r15 // Constants of current Lua function. | ||
28 | |.define PC, r16 // Next PC. | ||
29 | |.define DISPATCH, r17 // Opcode dispatch table. | ||
30 | |.define LREG, r18 // Register holding lua_State (also in SAVE_L). | ||
31 | | | ||
32 | |// Constants for vectorized type-comparisons (hi+low GPR). C callee-save. | ||
33 | |.define TISNUM, r21 | ||
34 | |.if SPE | ||
35 | |.define TISSTR, r22 | ||
36 | |.define TISTAB, r23 | ||
37 | |.define TISFUNC, r24 | ||
38 | |.define TISNIL, r25 | ||
39 | |.endif | ||
40 | | | ||
41 | |// The following temporaries are not saved across C calls, except for RA. | ||
42 | |.define RA, r19 // Callee-save. | ||
43 | |.define RB, r10 | ||
44 | |.define RC, r11 | ||
45 | |.define RD, r12 | ||
46 | |.define INS, r7 // Overlaps CARG5. | ||
47 | | | ||
48 | |.define TMP0, r0 | ||
49 | |.define TMP1, r8 | ||
50 | |.define TMP2, r9 | ||
51 | |.define TMP3, r6 // Overlaps CARG4. | ||
52 | | | ||
53 | |// Saved temporaries. | ||
54 | |.define SAVE0, r20 | ||
55 | | | ||
56 | |// Calling conventions. | ||
57 | |.define CARG1, r3 | ||
58 | |.define CARG2, r4 | ||
59 | |.define CARG3, r5 | ||
60 | |.define CARG4, r6 // Overlaps TMP3. | ||
61 | |.define CARG5, r7 // Overlaps INS. | ||
62 | | | ||
63 | |.define CRET1, r3 | ||
64 | |.define CRET2, r4 | ||
65 | | | ||
19 | |// Stack layout while in interpreter. Must match with lj_frame.h. | 66 | |// Stack layout while in interpreter. Must match with lj_frame.h. |
20 | |.if SPE | 67 | |.if SPE |
21 | |.define SAVE_LR, 180(sp) | 68 | |.define SAVE_LR, 180(sp) |
@@ -70,6 +117,21 @@ | |||
70 | | addi sp, sp, CFRAME_SPACE | 117 | | addi sp, sp, CFRAME_SPACE |
71 | |.endmacro | 118 | |.endmacro |
72 | | | 119 | | |
120 | |// Type definitions. Some of these are only used for documentation. | ||
121 | |.type L, lua_State, LREG | ||
122 | |.type GL, global_State | ||
123 | |.type TVALUE, TValue | ||
124 | |.type GCOBJ, GCobj | ||
125 | |.type STR, GCstr | ||
126 | |.type TAB, GCtab | ||
127 | |.type LFUNC, GCfuncL | ||
128 | |.type CFUNC, GCfuncC | ||
129 | |.type PROTO, GCproto | ||
130 | |.type UPVAL, GCupval | ||
131 | |.type NODE, Node | ||
132 | |.type NARGS8, int | ||
133 | |.type TRACE, GCtrace | ||
134 | | | ||
73 | |//----------------------------------------------------------------------- | 135 | |//----------------------------------------------------------------------- |
74 | | | 136 | | |
75 | |// Trap for not-yet-implemented parts. | 137 | |// Trap for not-yet-implemented parts. |
diff --git a/src/buildvm_ppcspe.h b/src/buildvm_ppcspe.h index 9a066bc6..8c25fdf8 100644 --- a/src/buildvm_ppcspe.h +++ b/src/buildvm_ppcspe.h | |||
@@ -748,6 +748,19 @@ static const char *const globnames[] = { | |||
748 | static const char *const extnames[] = { | 748 | static const char *const extnames[] = { |
749 | (const char *)0 | 749 | (const char *)0 |
750 | }; | 750 | }; |
751 | #define Dt1(_V) (int)(ptrdiff_t)&(((lua_State *)0)_V) | ||
752 | #define Dt2(_V) (int)(ptrdiff_t)&(((global_State *)0)_V) | ||
753 | #define Dt3(_V) (int)(ptrdiff_t)&(((TValue *)0)_V) | ||
754 | #define Dt4(_V) (int)(ptrdiff_t)&(((GCobj *)0)_V) | ||
755 | #define Dt5(_V) (int)(ptrdiff_t)&(((GCstr *)0)_V) | ||
756 | #define Dt6(_V) (int)(ptrdiff_t)&(((GCtab *)0)_V) | ||
757 | #define Dt7(_V) (int)(ptrdiff_t)&(((GCfuncL *)0)_V) | ||
758 | #define Dt8(_V) (int)(ptrdiff_t)&(((GCfuncC *)0)_V) | ||
759 | #define Dt9(_V) (int)(ptrdiff_t)&(((GCproto *)0)_V) | ||
760 | #define DtA(_V) (int)(ptrdiff_t)&(((GCupval *)0)_V) | ||
761 | #define DtB(_V) (int)(ptrdiff_t)&(((Node *)0)_V) | ||
762 | #define DtC(_V) (int)(ptrdiff_t)&(((int *)0)_V) | ||
763 | #define DtD(_V) (int)(ptrdiff_t)&(((GCtrace *)0)_V) | ||
751 | #define DISPATCH_GL(field) (GG_DISP2G + (int)offsetof(global_State, field)) | 764 | #define DISPATCH_GL(field) (GG_DISP2G + (int)offsetof(global_State, field)) |
752 | #define DISPATCH_J(field) (GG_DISP2J + (int)offsetof(jit_State, field)) | 765 | #define DISPATCH_J(field) (GG_DISP2J + (int)offsetof(jit_State, field)) |
753 | #define PC2PROTO(field) ((int)offsetof(GCproto, field)-(int)sizeof(GCproto)) | 766 | #define PC2PROTO(field) ((int)offsetof(GCproto, field)-(int)sizeof(GCproto)) |