mirror of
https://github.com/LuaJIT/LuaJIT.git
synced 2025-02-07 23:24:09 +00:00
ARM: Fix IR splitting for softfp XLOAD.
This commit is contained in:
parent
4bcf2b40fe
commit
fa1675baad
@ -809,8 +809,10 @@ static void asm_snap_alloc(ASMState *as)
|
|||||||
IRRef ref = snap_ref(sn);
|
IRRef ref = snap_ref(sn);
|
||||||
if (!irref_isk(ref)) {
|
if (!irref_isk(ref)) {
|
||||||
asm_snap_alloc1(as, ref);
|
asm_snap_alloc1(as, ref);
|
||||||
if (LJ_SOFTFP && (sn & SNAP_SOFTFPNUM))
|
if (LJ_SOFTFP && (sn & SNAP_SOFTFPNUM)) {
|
||||||
|
lua_assert(irt_type(IR(ref+1)->t) == IRT_SOFTFP);
|
||||||
asm_snap_alloc1(as, ref+1);
|
asm_snap_alloc1(as, ref+1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -313,13 +313,21 @@ static void split_ir(jit_State *J)
|
|||||||
case IR_STRTO:
|
case IR_STRTO:
|
||||||
hi = split_emit(J, IRT(IR_HIOP, IRT_SOFTFP), nref, nref);
|
hi = split_emit(J, IRT(IR_HIOP, IRT_SOFTFP), nref, nref);
|
||||||
break;
|
break;
|
||||||
case IR_XLOAD:
|
case IR_XLOAD: {
|
||||||
hi = split_emit(J, IRT(IR_XLOAD, IRT_SOFTFP),
|
IRIns inslo = *nir; /* Save/undo the emit of the lo XLOAD. */
|
||||||
split_ptr(J, oir, ir->op1), ir->op2);
|
J->cur.nins--;
|
||||||
#if LJ_BE
|
hi = split_ptr(J, oir, ir->op1); /* Insert the hiref ADD. */
|
||||||
|
nref = lj_ir_nextins(J);
|
||||||
|
nir = IR(nref);
|
||||||
|
*nir = inslo; /* Re-emit lo XLOAD immediately before hi XLOAD. */
|
||||||
|
hi = split_emit(J, IRT(IR_XLOAD, IRT_SOFTFP), hi, ir->op2);
|
||||||
|
#if LJ_LE
|
||||||
|
ir->prev = nref;
|
||||||
|
#else
|
||||||
ir->prev = hi; hi = nref;
|
ir->prev = hi; hi = nref;
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
case IR_ASTORE: case IR_HSTORE: case IR_USTORE:
|
case IR_ASTORE: case IR_HSTORE: case IR_USTORE:
|
||||||
split_emit(J, IRT(IR_HIOP, IRT_SOFTFP), nir->op1, hisubst[ir->op2]);
|
split_emit(J, IRT(IR_HIOP, IRT_SOFTFP), nir->op1, hisubst[ir->op2]);
|
||||||
break;
|
break;
|
||||||
|
Loading…
Reference in New Issue
Block a user