diff options
author | Bruce Forstall <brucefo@microsoft.com> | 2017-04-06 14:40:08 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-04-06 14:40:08 -0700 |
commit | 9c74cbac6c86f2c484c7ebd4c81a6aee6bd7cc25 (patch) | |
tree | 62403992fceb21b9875d0b55e0a147b3f7196a54 /src | |
parent | be5db76135b0fba4461d4cf0db2ad546c1c0a095 (diff) | |
parent | 086b000d671b8a3daae911652044b8086a489084 (diff) | |
download | coreclr-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.cpp | 16 |
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); |