aboutsummaryrefslogtreecommitdiff
path: root/src/lj_emit_arm.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/lj_emit_arm.h')
-rw-r--r--src/lj_emit_arm.h21
1 files changed, 11 insertions, 10 deletions
diff --git a/src/lj_emit_arm.h b/src/lj_emit_arm.h
index 6a136e51..25561549 100644
--- a/src/lj_emit_arm.h
+++ b/src/lj_emit_arm.h
@@ -207,7 +207,7 @@ static void emit_loadi(ASMState *as, Reg r, int32_t i)
207 207
208#define emit_loada(as, r, addr) emit_loadi(as, (r), i32ptr((addr))) 208#define emit_loada(as, r, addr) emit_loadi(as, (r), i32ptr((addr)))
209 209
210static Reg ra_allock(ASMState *as, int32_t k, RegSet allow); 210static Reg ra_allock(ASMState *as, intptr_t k, RegSet allow);
211 211
212/* Get/set from constant pointer. */ 212/* Get/set from constant pointer. */
213static void emit_lsptr(ASMState *as, ARMIns ai, Reg r, void *p) 213static void emit_lsptr(ASMState *as, ARMIns ai, Reg r, void *p)
@@ -219,8 +219,9 @@ static void emit_lsptr(ASMState *as, ARMIns ai, Reg r, void *p)
219 219
220#if !LJ_SOFTFP 220#if !LJ_SOFTFP
221/* Load a number constant into an FPR. */ 221/* Load a number constant into an FPR. */
222static void emit_loadn(ASMState *as, Reg r, cTValue *tv) 222static void emit_loadk64(ASMState *as, Reg r, IRIns *ir)
223{ 223{
224 cTValue *tv = ir_knum(ir);
224 int32_t i; 225 int32_t i;
225 if ((as->flags & JIT_F_VFPV3) && !tv->u32.lo) { 226 if ((as->flags & JIT_F_VFPV3) && !tv->u32.lo) {
226 uint32_t hi = tv->u32.hi; 227 uint32_t hi = tv->u32.hi;
@@ -308,30 +309,30 @@ static void emit_movrr(ASMState *as, IRIns *ir, Reg dst, Reg src)
308 emit_dm(as, ARMI_MOV, dst, src); 309 emit_dm(as, ARMI_MOV, dst, src);
309} 310}
310 311
311/* Generic load of register from stack slot. */ 312/* Generic load of register with base and (small) offset address. */
312static void emit_spload(ASMState *as, IRIns *ir, Reg r, int32_t ofs) 313static void emit_loadofs(ASMState *as, IRIns *ir, Reg r, Reg base, int32_t ofs)
313{ 314{
314#if LJ_SOFTFP 315#if LJ_SOFTFP
315 lua_assert(!irt_isnum(ir->t)); UNUSED(ir); 316 lua_assert(!irt_isnum(ir->t)); UNUSED(ir);
316#else 317#else
317 if (r >= RID_MAX_GPR) 318 if (r >= RID_MAX_GPR)
318 emit_vlso(as, irt_isnum(ir->t) ? ARMI_VLDR_D : ARMI_VLDR_S, r, RID_SP, ofs); 319 emit_vlso(as, irt_isnum(ir->t) ? ARMI_VLDR_D : ARMI_VLDR_S, r, base, ofs);
319 else 320 else
320#endif 321#endif
321 emit_lso(as, ARMI_LDR, r, RID_SP, ofs); 322 emit_lso(as, ARMI_LDR, r, base, ofs);
322} 323}
323 324
324/* Generic store of register to stack slot. */ 325/* Generic store of register with base and (small) offset address. */
325static void emit_spstore(ASMState *as, IRIns *ir, Reg r, int32_t ofs) 326static void emit_storeofs(ASMState *as, IRIns *ir, Reg r, Reg base, int32_t ofs)
326{ 327{
327#if LJ_SOFTFP 328#if LJ_SOFTFP
328 lua_assert(!irt_isnum(ir->t)); UNUSED(ir); 329 lua_assert(!irt_isnum(ir->t)); UNUSED(ir);
329#else 330#else
330 if (r >= RID_MAX_GPR) 331 if (r >= RID_MAX_GPR)
331 emit_vlso(as, irt_isnum(ir->t) ? ARMI_VSTR_D : ARMI_VSTR_S, r, RID_SP, ofs); 332 emit_vlso(as, irt_isnum(ir->t) ? ARMI_VSTR_D : ARMI_VSTR_S, r, base, ofs);
332 else 333 else
333#endif 334#endif
334 emit_lso(as, ARMI_STR, r, RID_SP, ofs); 335 emit_lso(as, ARMI_STR, r, base, ofs);
335} 336}
336 337
337/* Emit an arithmetic/logic operation with a constant operand. */ 338/* Emit an arithmetic/logic operation with a constant operand. */