summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBruce Forstall <brucefo@microsoft.com>2017-04-06 14:40:08 -0700
committerGitHub <noreply@github.com>2017-04-06 14:40:08 -0700
commit9c74cbac6c86f2c484c7ebd4c81a6aee6bd7cc25 (patch)
tree62403992fceb21b9875d0b55e0a147b3f7196a54 /src
parentbe5db76135b0fba4461d4cf0db2ad546c1c0a095 (diff)
parent086b000d671b8a3daae911652044b8086a489084 (diff)
downloadcoreclr-9c74cbac6c86f2c484c7ebd4c81a6aee6bd7cc25.tar.gz
coreclr-9c74cbac6c86f2c484c7ebd4c81a6aee6bd7cc25.tar.bz2
coreclr-9c74cbac6c86f2c484c7ebd4c81a6aee6bd7cc25.zip
Merge pull request #10768 from mskvortsov/ryujit-arm32-lea
[RyuJIT/ARM32] Update genLeaInstruction
Diffstat (limited to 'src')
-rw-r--r--src/jit/codegenarm.cpp16
1 files changed, 12 insertions, 4 deletions
diff --git a/src/jit/codegenarm.cpp b/src/jit/codegenarm.cpp
index ca3dce1167..34c86e921e 100644
--- a/src/jit/codegenarm.cpp
+++ b/src/jit/codegenarm.cpp
@@ -2544,15 +2544,23 @@ void CodeGen::genCallInstruction(GenTreeCall* call)
//
void CodeGen::genLeaInstruction(GenTreeAddrMode* lea)
{
+ emitAttr size = emitTypeSize(lea);
+ genConsumeOperands(lea);
+
if (lea->Base() && lea->Index())
{
- regNumber baseReg = genConsumeReg(lea->Base());
- regNumber indexReg = genConsumeReg(lea->Index());
- getEmitter()->emitIns_R_ARX(INS_lea, EA_BYREF, lea->gtRegNum, baseReg, indexReg, lea->gtScale, lea->gtOffset);
+ regNumber baseReg = lea->Base()->gtRegNum;
+ regNumber indexReg = lea->Index()->gtRegNum;
+ getEmitter()->emitIns_R_ARX(INS_lea, size, lea->gtRegNum, baseReg, indexReg, lea->gtScale, lea->gtOffset);
}
else if (lea->Base())
{
- getEmitter()->emitIns_R_AR(INS_lea, EA_BYREF, lea->gtRegNum, genConsumeReg(lea->Base()), lea->gtOffset);
+ regNumber baseReg = lea->Base()->gtRegNum;
+ getEmitter()->emitIns_R_AR(INS_lea, size, lea->gtRegNum, baseReg, lea->gtOffset);
+ }
+ else if (lea->Index())
+ {
+ assert(!"Should we see a baseless address computation during CodeGen for ARM32?");
}
genProduceReg(lea);