aboutsummaryrefslogtreecommitdiff
path: root/src/lj_opt_split.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/lj_opt_split.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/lj_opt_split.c b/src/lj_opt_split.c
index 4652c737..d12c7dfd 100644
--- a/src/lj_opt_split.c
+++ b/src/lj_opt_split.c
@@ -192,7 +192,7 @@ static IRRef split_ptr(jit_State *J, IRIns *oir, IRRef ref)
192 nref = ir->op1; 192 nref = ir->op1;
193 if (ofs == 0) return nref; 193 if (ofs == 0) return nref;
194 } 194 }
195 return split_emit(J, IRTI(IR_ADD), nref, lj_ir_kint(J, ofs)); 195 return split_emit(J, IRT(IR_ADD, IRT_PTR), nref, lj_ir_kint(J, ofs));
196} 196}
197 197
198#if LJ_HASFFI 198#if LJ_HASFFI
@@ -452,11 +452,15 @@ static void split_ir(jit_State *J)
452 IRIns inslo = *nir; /* Save/undo the emit of the lo XLOAD. */ 452 IRIns inslo = *nir; /* Save/undo the emit of the lo XLOAD. */
453 J->cur.nins--; 453 J->cur.nins--;
454 hi = split_ptr(J, oir, ir->op1); /* Insert the hiref ADD. */ 454 hi = split_ptr(J, oir, ir->op1); /* Insert the hiref ADD. */
455#if LJ_BE
456 hi = split_emit(J, IRT(IR_XLOAD, IRT_INT), hi, ir->op2);
457 inslo.t.irt = IRT_SOFTFP | (inslo.t.irt & IRT_GUARD);
458#endif
455 nref = lj_ir_nextins(J); 459 nref = lj_ir_nextins(J);
456 nir = IR(nref); 460 nir = IR(nref);
457 *nir = inslo; /* Re-emit lo XLOAD immediately before hi XLOAD. */ 461 *nir = inslo; /* Re-emit lo XLOAD. */
458 hi = split_emit(J, IRT(IR_XLOAD, IRT_SOFTFP), hi, ir->op2);
459#if LJ_LE 462#if LJ_LE
463 hi = split_emit(J, IRT(IR_XLOAD, IRT_SOFTFP), hi, ir->op2);
460 ir->prev = nref; 464 ir->prev = nref;
461#else 465#else
462 ir->prev = hi; hi = nref; 466 ir->prev = hi; hi = nref;