diff options
Diffstat (limited to 'src/lj_emit_arm.h')
-rw-r--r-- | src/lj_emit_arm.h | 21 |
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 | ||
210 | static Reg ra_allock(ASMState *as, int32_t k, RegSet allow); | 210 | static Reg ra_allock(ASMState *as, intptr_t k, RegSet allow); |
211 | 211 | ||
212 | /* Get/set from constant pointer. */ | 212 | /* Get/set from constant pointer. */ |
213 | static void emit_lsptr(ASMState *as, ARMIns ai, Reg r, void *p) | 213 | static 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. */ |
222 | static void emit_loadn(ASMState *as, Reg r, cTValue *tv) | 222 | static 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. */ |
312 | static void emit_spload(ASMState *as, IRIns *ir, Reg r, int32_t ofs) | 313 | static 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. */ |
325 | static void emit_spstore(ASMState *as, IRIns *ir, Reg r, int32_t ofs) | 326 | static 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. */ |