@@ -1849,28 +1849,22 @@ void CodeGen::genAllocLclFrame(unsigned frameSize, regNumber initReg, bool* pIni
1849
1849
{
1850
1850
GetEmitter ()->emitIns_R_I (INS_sub, EA_PTRSIZE, REG_SPBASE, frameSize);
1851
1851
}
1852
- else if (frameSize < compiler->getVeryLargeFrameSize ())
1853
- {
1854
- for (target_size_t probeOffset = pageSize; probeOffset <= frameSize; probeOffset += pageSize)
1855
- {
1856
- // Generate:
1857
- // movw initReg, -probeOffset
1858
- // ldr initReg, [SP + initReg]
1859
-
1860
- instGen_Set_Reg_To_Imm (EA_PTRSIZE, initReg, -(ssize_t )probeOffset);
1861
- GetEmitter ()->emitIns_R_R_R (INS_ldr, EA_PTRSIZE, initReg, REG_SPBASE, initReg);
1862
- }
1863
-
1864
- regSet.verifyRegUsed (initReg);
1865
- *pInitRegZeroed = false ; // The initReg does not contain zero
1866
-
1867
- instGen_Set_Reg_To_Imm (EA_PTRSIZE, initReg, frameSize);
1868
- compiler->unwindPadding ();
1869
- GetEmitter ()->emitIns_R_R_R (INS_sub, EA_PTRSIZE, REG_SPBASE, REG_SPBASE, initReg);
1870
- }
1871
1852
else
1872
1853
{
1873
- assert (frameSize >= compiler->getVeryLargeFrameSize ());
1854
+ // Generate the following code:
1855
+ //
1856
+ // movw r4, #frameSize
1857
+ // sub r4, sp, r4
1858
+ // bl CORINFO_HELP_STACK_PROBE
1859
+ // mov sp, r4
1860
+ //
1861
+ // If frameSize can not be encoded by movw immediate this becomes:
1862
+ //
1863
+ // movw r4, #frameSizeLo16
1864
+ // movt r4, #frameSizeHi16
1865
+ // sub r4, sp, r4
1866
+ // bl CORINFO_HELP_STACK_PROBE
1867
+ // mov sp, r4
1874
1868
1875
1869
genInstrWithConstant (INS_sub, EA_PTRSIZE, REG_STACK_PROBE_HELPER_ARG, REG_SPBASE, frameSize,
1876
1870
INS_FLAGS_DONT_CARE, REG_STACK_PROBE_HELPER_ARG);
0 commit comments