@@ -1976,10 +1976,12 @@ void CodeGen::genZeroInitFrameUsingBlockInit(int untrLclHi, int untrLclLo, regNu
19761976 GetEmitter ()->emitIns_R_R_I_I (INS_bfm, EA_PTRSIZE , addrReg, REG_ZR , 0 , 5 );
19771977 // addrReg points at the beginning of a cache line.
19781978
1979+ BasicBlock* loopHead = genCreateTempLabel ();
1980+ genDefineInlineTempLabel (loopHead);
19791981 GetEmitter ()->emitIns_R (INS_dczva, EA_PTRSIZE , addrReg);
19801982 GetEmitter ()->emitIns_R_R_I (INS_add, EA_PTRSIZE , addrReg, addrReg, 64 );
19811983 GetEmitter ()->emitIns_R_R (INS_cmp, EA_PTRSIZE , addrReg, endAddrReg);
1982- GetEmitter ()->emitIns_J (INS_blo, NULL , - 4 );
1984+ GetEmitter ()->emitIns_ShortJ (INS_blo, loopHead );
19831985
19841986 addrReg = endAddrReg;
19851987 bytesToWrite = 64 ;
@@ -1998,12 +2000,14 @@ void CodeGen::genZeroInitFrameUsingBlockInit(int untrLclHi, int untrLclLo, regNu
19982000
19992001 instGen_Set_Reg_To_Imm (EA_PTRSIZE , countReg, bytesToWrite - 64 );
20002002
2003+ BasicBlock* loopHead = genCreateTempLabel ();
2004+ genDefineInlineTempLabel (loopHead);
20012005 GetEmitter ()->emitIns_R_R_R_I (INS_stp, EA_16BYTE , zeroSimdReg, zeroSimdReg, addrReg, 32 );
20022006 GetEmitter ()->emitIns_R_R_R_I (INS_stp, EA_16BYTE , zeroSimdReg, zeroSimdReg, addrReg, 64 ,
20032007 INS_OPTS_PRE_INDEX );
20042008
20052009 GetEmitter ()->emitIns_R_R_I (INS_subs, EA_PTRSIZE , countReg, countReg, 64 );
2006- GetEmitter ()->emitIns_J (INS_bge, NULL , - 4 );
2010+ GetEmitter ()->emitIns_ShortJ (INS_bge, loopHead );
20072011
20082012 bytesToWrite %= 64 ;
20092013 }
@@ -3835,7 +3839,7 @@ void CodeGen::genAsyncResumeInfo(GenTreeVal* treeNode)
38353839//
38363840void CodeGen::genFtnEntry (GenTree* treeNode)
38373841{
3838- GetEmitter ()->emitIns_R_L (INS_adr, EA_PTRSIZE , GetEmitter ()->emitPrologIG , treeNode->GetRegNum ());
3842+ GetEmitter ()->emitIns_R_L (INS_adr, EA_PTRSIZE , GetEmitter ()->emitGetFirstPrologIG () , treeNode->GetRegNum ());
38393843 genProduceReg (treeNode);
38403844}
38413845
@@ -5947,13 +5951,12 @@ void CodeGen::genAllocLclFrame(unsigned frameSize, regNumber initReg, bool* pIni
59475951 instGen_Set_Reg_To_Imm (EA_PTRSIZE , rOffset, -(ssize_t )pageSize);
59485952 instGen_Set_Reg_To_Imm (EA_PTRSIZE , rLimit, -(ssize_t )frameSize);
59495953
5950- // There's a "virtual" label here. But we can't create a label in the prolog, so we use the magic
5951- // `emitIns_J` with a negative `instrCount` to branch back a specific number of instructions.
5952-
5954+ BasicBlock* loopHead = genCreateTempLabel ();
5955+ genDefineInlineTempLabel (loopHead);
59535956 GetEmitter ()->emitIns_R_R_R (INS_ldr, EA_4BYTE , REG_ZR , REG_SPBASE , rOffset);
59545957 GetEmitter ()->emitIns_R_R_I (INS_sub, EA_PTRSIZE , rOffset, rOffset, pageSize);
59555958 GetEmitter ()->emitIns_R_R (INS_cmp, EA_PTRSIZE , rLimit, rOffset); // If equal, we need to probe again
5956- GetEmitter ()->emitIns_J (INS_bls, NULL , - 4 );
5959+ GetEmitter ()->emitIns_ShortJ (INS_bls, loopHead );
59575960
59585961 *pInitRegZeroed = false ; // The initReg does not contain zero
59595962
0 commit comments