diff options
Diffstat (limited to 'src/lj_emit_ppc.h')
-rw-r--r-- | src/lj_emit_ppc.h | 34 |
1 files changed, 17 insertions, 17 deletions
diff --git a/src/lj_emit_ppc.h b/src/lj_emit_ppc.h index 6d0ea185..86760e78 100644 --- a/src/lj_emit_ppc.h +++ b/src/lj_emit_ppc.h | |||
@@ -41,13 +41,13 @@ static void emit_rot(ASMState *as, PPCIns pi, Reg ra, Reg rs, | |||
41 | 41 | ||
42 | static void emit_slwi(ASMState *as, Reg ra, Reg rs, int32_t n) | 42 | static void emit_slwi(ASMState *as, Reg ra, Reg rs, int32_t n) |
43 | { | 43 | { |
44 | lua_assert(n >= 0 && n < 32); | 44 | lj_assertA(n >= 0 && n < 32, "shift out or range"); |
45 | emit_rot(as, PPCI_RLWINM, ra, rs, n, 0, 31-n); | 45 | emit_rot(as, PPCI_RLWINM, ra, rs, n, 0, 31-n); |
46 | } | 46 | } |
47 | 47 | ||
48 | static void emit_rotlwi(ASMState *as, Reg ra, Reg rs, int32_t n) | 48 | static void emit_rotlwi(ASMState *as, Reg ra, Reg rs, int32_t n) |
49 | { | 49 | { |
50 | lua_assert(n >= 0 && n < 32); | 50 | lj_assertA(n >= 0 && n < 32, "shift out or range"); |
51 | emit_rot(as, PPCI_RLWINM, ra, rs, n, 0, 31); | 51 | emit_rot(as, PPCI_RLWINM, ra, rs, n, 0, 31); |
52 | } | 52 | } |
53 | 53 | ||
@@ -57,17 +57,17 @@ static void emit_rotlwi(ASMState *as, Reg ra, Reg rs, int32_t n) | |||
57 | #define emit_canremat(ref) ((ref) <= REF_BASE) | 57 | #define emit_canremat(ref) ((ref) <= REF_BASE) |
58 | 58 | ||
59 | /* Try to find a one step delta relative to another constant. */ | 59 | /* Try to find a one step delta relative to another constant. */ |
60 | static int emit_kdelta1(ASMState *as, Reg t, int32_t i) | 60 | static int emit_kdelta1(ASMState *as, Reg rd, int32_t i) |
61 | { | 61 | { |
62 | RegSet work = ~as->freeset & RSET_GPR; | 62 | RegSet work = ~as->freeset & RSET_GPR; |
63 | while (work) { | 63 | while (work) { |
64 | Reg r = rset_picktop(work); | 64 | Reg r = rset_picktop(work); |
65 | IRRef ref = regcost_ref(as->cost[r]); | 65 | IRRef ref = regcost_ref(as->cost[r]); |
66 | lua_assert(r != t); | 66 | lj_assertA(r != rd, "dest reg %d not free", rd); |
67 | if (ref < ASMREF_L) { | 67 | if (ref < ASMREF_L) { |
68 | int32_t delta = i - (ra_iskref(ref) ? ra_krefk(as, ref) : IR(ref)->i); | 68 | int32_t delta = i - (ra_iskref(ref) ? ra_krefk(as, ref) : IR(ref)->i); |
69 | if (checki16(delta)) { | 69 | if (checki16(delta)) { |
70 | emit_tai(as, PPCI_ADDI, t, r, delta); | 70 | emit_tai(as, PPCI_ADDI, rd, r, delta); |
71 | return 1; | 71 | return 1; |
72 | } | 72 | } |
73 | } | 73 | } |
@@ -98,7 +98,7 @@ static void emit_loadi(ASMState *as, Reg r, int32_t i) | |||
98 | 98 | ||
99 | #define emit_loada(as, r, addr) emit_loadi(as, (r), i32ptr((addr))) | 99 | #define emit_loada(as, r, addr) emit_loadi(as, (r), i32ptr((addr))) |
100 | 100 | ||
101 | static Reg ra_allock(ASMState *as, int32_t k, RegSet allow); | 101 | static Reg ra_allock(ASMState *as, intptr_t k, RegSet allow); |
102 | 102 | ||
103 | /* Get/set from constant pointer. */ | 103 | /* Get/set from constant pointer. */ |
104 | static void emit_lsptr(ASMState *as, PPCIns pi, Reg r, void *p, RegSet allow) | 104 | static void emit_lsptr(ASMState *as, PPCIns pi, Reg r, void *p, RegSet allow) |
@@ -115,8 +115,8 @@ static void emit_lsptr(ASMState *as, PPCIns pi, Reg r, void *p, RegSet allow) | |||
115 | emit_tai(as, pi, r, base, i); | 115 | emit_tai(as, pi, r, base, i); |
116 | } | 116 | } |
117 | 117 | ||
118 | #define emit_loadn(as, r, tv) \ | 118 | #define emit_loadk64(as, r, ir) \ |
119 | emit_lsptr(as, PPCI_LFD, ((r) & 31), (void *)(tv), RSET_GPR) | 119 | emit_lsptr(as, PPCI_LFD, ((r) & 31), (void *)&ir_knum((ir))->u64, RSET_GPR) |
120 | 120 | ||
121 | /* Get/set global_State fields. */ | 121 | /* Get/set global_State fields. */ |
122 | static void emit_lsglptr(ASMState *as, PPCIns pi, Reg r, int32_t ofs) | 122 | static void emit_lsglptr(ASMState *as, PPCIns pi, Reg r, int32_t ofs) |
@@ -144,7 +144,7 @@ static void emit_condbranch(ASMState *as, PPCIns pi, PPCCC cc, MCode *target) | |||
144 | { | 144 | { |
145 | MCode *p = --as->mcp; | 145 | MCode *p = --as->mcp; |
146 | ptrdiff_t delta = (char *)target - (char *)p; | 146 | ptrdiff_t delta = (char *)target - (char *)p; |
147 | lua_assert(((delta + 0x8000) >> 16) == 0); | 147 | lj_assertA(((delta + 0x8000) >> 16) == 0, "branch target out of range"); |
148 | pi ^= (delta & 0x8000) * (PPCF_Y/0x8000); | 148 | pi ^= (delta & 0x8000) * (PPCF_Y/0x8000); |
149 | *p = pi | PPCF_CC(cc) | ((uint32_t)delta & 0xffffu); | 149 | *p = pi | PPCF_CC(cc) | ((uint32_t)delta & 0xffffu); |
150 | } | 150 | } |
@@ -186,22 +186,22 @@ static void emit_movrr(ASMState *as, IRIns *ir, Reg dst, Reg src) | |||
186 | emit_fb(as, PPCI_FMR, dst, src); | 186 | emit_fb(as, PPCI_FMR, dst, src); |
187 | } | 187 | } |
188 | 188 | ||
189 | /* Generic load of register from stack slot. */ | 189 | /* Generic load of register with base and (small) offset address. */ |
190 | static void emit_spload(ASMState *as, IRIns *ir, Reg r, int32_t ofs) | 190 | static void emit_loadofs(ASMState *as, IRIns *ir, Reg r, Reg base, int32_t ofs) |
191 | { | 191 | { |
192 | if (r < RID_MAX_GPR) | 192 | if (r < RID_MAX_GPR) |
193 | emit_tai(as, PPCI_LWZ, r, RID_SP, ofs); | 193 | emit_tai(as, PPCI_LWZ, r, base, ofs); |
194 | else | 194 | else |
195 | emit_fai(as, irt_isnum(ir->t) ? PPCI_LFD : PPCI_LFS, r, RID_SP, ofs); | 195 | emit_fai(as, irt_isnum(ir->t) ? PPCI_LFD : PPCI_LFS, r, base, ofs); |
196 | } | 196 | } |
197 | 197 | ||
198 | /* Generic store of register to stack slot. */ | 198 | /* Generic store of register with base and (small) offset address. */ |
199 | static void emit_spstore(ASMState *as, IRIns *ir, Reg r, int32_t ofs) | 199 | static void emit_storeofs(ASMState *as, IRIns *ir, Reg r, Reg base, int32_t ofs) |
200 | { | 200 | { |
201 | if (r < RID_MAX_GPR) | 201 | if (r < RID_MAX_GPR) |
202 | emit_tai(as, PPCI_STW, r, RID_SP, ofs); | 202 | emit_tai(as, PPCI_STW, r, base, ofs); |
203 | else | 203 | else |
204 | emit_fai(as, irt_isnum(ir->t) ? PPCI_STFD : PPCI_STFS, r, RID_SP, ofs); | 204 | emit_fai(as, irt_isnum(ir->t) ? PPCI_STFD : PPCI_STFS, r, base, ofs); |
205 | } | 205 | } |
206 | 206 | ||
207 | /* Emit a compare (for equality) with a constant operand. */ | 207 | /* Emit a compare (for equality) with a constant operand. */ |