From: Mike Pall Date: Tue, 14 Nov 2023 21:56:09 +0000 (+0100) Subject: Merge branch 'master' into v2.1 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=536cf8a2715b64902f56a3c01fc4e030c8add93b;p=thirdparty%2FLuaJIT.git Merge branch 'master' into v2.1 --- 536cf8a2715b64902f56a3c01fc4e030c8add93b diff --cc src/lj_asm_x86.h index 955a54a4,ddbe9c55..9fa411a0 --- a/src/lj_asm_x86.h +++ b/src/lj_asm_x86.h @@@ -131,10 -117,10 +133,10 @@@ static IRRef asm_fuseabase(ASMState *as as->mrm.ofs = 0; if (irb->o == IR_FLOAD) { IRIns *ira = IR(irb->op1); - lua_assert(irb->op2 == IRFL_TAB_ARRAY); + lj_assertA(irb->op2 == IRFL_TAB_ARRAY, "expected FLOAD TAB_ARRAY"); /* We can avoid the FLOAD of t->array for colocated arrays. */ if (ira->o == IR_TNEW && ira->op1 <= LJ_MAX_COLOSIZE && - !neverfuse(as) && noconflict(as, irb->op1, IR_NEWREF, 1)) { + !neverfuse(as) && noconflict(as, irb->op1, IR_NEWREF, 0)) { as->mrm.ofs = (int32_t)sizeof(GCtab); /* Ofs to colocated array. */ return irb->op1; /* Table obj. */ } @@@ -456,11 -339,9 +458,11 @@@ static Reg asm_fuseload(ASMState *as, I RegSet xallow = (allow & RSET_GPR) ? allow : RSET_GPR; if (ir->o == IR_SLOAD) { if (!(ir->op2 & (IRSLOAD_PARENT|IRSLOAD_CONVERT)) && - noconflict(as, ref, IR_RETF, 0) && - noconflict(as, ref, IR_RETF, 2)) { ++ noconflict(as, ref, IR_RETF, 2) && + !(LJ_GC64 && irt_isaddr(ir->t))) { as->mrm.base = (uint8_t)ra_alloc1(as, REF_BASE, xallow); - as->mrm.ofs = 8*((int32_t)ir->op1-1) + ((ir->op2&IRSLOAD_FRAME)?4:0); + as->mrm.ofs = 8*((int32_t)ir->op1-1-LJ_FR2) + + (!LJ_FR2 && (ir->op2 & IRSLOAD_FRAME) ? 4 : 0); as->mrm.idx = RID_NONE; return RID_MRM; } @@@ -472,9 -353,7 +474,8 @@@ return RID_MRM; } } else if (ir->o == IR_ALOAD || ir->o == IR_HLOAD || ir->o == IR_ULOAD) { - if (noconflict(as, ref, ir->o + IRDELTA_L2S, 0) && - noconflict(as, ref, IR_CALLS, 1) && /* Don't cross table.clear. */ - if (noconflict(as, ref, ir->o + IRDELTA_L2S, 2+(ir->o != IR_ULOAD))) { ++ if (noconflict(as, ref, ir->o + IRDELTA_L2S, 2+(ir->o != IR_ULOAD)) && + !(LJ_GC64 && irt_isaddr(ir->t))) { asm_fuseahuref(as, ir->op1, xallow); return RID_MRM; }