diff options
Diffstat (limited to 'src/lj_crecord.c')
-rw-r--r-- | src/lj_crecord.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/lj_crecord.c b/src/lj_crecord.c index 001cf600..4e6a644a 100644 --- a/src/lj_crecord.c +++ b/src/lj_crecord.c | |||
@@ -526,9 +526,13 @@ again: | |||
526 | idx = emitir(IRT(IR_BAND, IRT_INTP), idx, lj_ir_kintp(J, 1)); | 526 | idx = emitir(IRT(IR_BAND, IRT_INTP), idx, lj_ir_kintp(J, 1)); |
527 | sz = lj_ctype_size(cts, (sid = ctype_cid(ct->info))); | 527 | sz = lj_ctype_size(cts, (sid = ctype_cid(ct->info))); |
528 | idx = crec_reassoc_ofs(J, idx, &ofs, sz); | 528 | idx = crec_reassoc_ofs(J, idx, &ofs, sz); |
529 | #if LJ_TARGET_ARM || LJ_TARGET_PPC | ||
530 | /* Hoist base add to allow fusion of index/shift into operands. */ | ||
531 | if (LJ_LIKELY(J->flags & JIT_F_OPT_LOOP) && ofs | ||
529 | #if LJ_TARGET_ARM | 532 | #if LJ_TARGET_ARM |
530 | /* Hoist base add to allow fusion of shifts into operands. */ | 533 | && (sz == 1 || sz == 4) |
531 | if (LJ_LIKELY(J->flags & JIT_F_OPT_LOOP) && ofs && (sz == 1 || sz == 4)) { | 534 | #endif |
535 | ) { | ||
532 | ptr = emitir(IRT(IR_ADD, IRT_PTR), ptr, lj_ir_kintp(J, ofs)); | 536 | ptr = emitir(IRT(IR_ADD, IRT_PTR), ptr, lj_ir_kintp(J, ofs)); |
533 | ofs = 0; | 537 | ofs = 0; |
534 | } | 538 | } |