diff options
Diffstat (limited to '')
-rw-r--r-- | src/lj_opt_split.c | 10 |
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; |