From: Hyeongseok Oh Date: Mon, 20 Mar 2017 06:26:33 +0000 (+0900) Subject: [ARM32/Linux] Fix register allocation for null check in call instruction X-Git-Tag: accepted/tizen/base/20180629.140029~1576^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=dd130b56246b8854fb711bcb32839b398eb240ee;p=platform%2Fupstream%2Fcoreclr.git [ARM32/Linux] Fix register allocation for null check in call instruction Fix assertion when two temporary registers are reserved in call instruction --- diff --git a/src/jit/codegenarm.cpp b/src/jit/codegenarm.cpp index e276b71..b5e3313 100644 --- a/src/jit/codegenarm.cpp +++ b/src/jit/codegenarm.cpp @@ -1952,8 +1952,13 @@ void CodeGen::genCallInstruction(GenTreeCall* call) // Insert a null check on "this" pointer if asked. if (call->NeedsNullCheck()) { - const regNumber regThis = genGetThisArgReg(call); - const regNumber tmpReg = genRegNumFromMask(call->gtRsvdRegs); + const regNumber regThis = genGetThisArgReg(call); + regMaskTP tempMask = genFindLowestBit(call->gtRsvdRegs); + const regNumber tmpReg = genRegNumFromMask(tempMask); + if (genCountBits(call->gtRsvdRegs) > 1) + { + call->gtRsvdRegs &= ~tempMask; + } getEmitter()->emitIns_R_R_I(INS_ldr, EA_4BYTE, tmpReg, regThis, 0); }