From 086b000d671b8a3daae911652044b8086a489084 Mon Sep 17 00:00:00 2001 From: Mikhail Skvortcov Date: Thu, 6 Apr 2017 18:53:15 +0300 Subject: [PATCH] RyuJIT/ARM32: update GT_LEA codegen --- src/jit/codegenarm.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/jit/codegenarm.cpp b/src/jit/codegenarm.cpp index ca3dce1..34c86e9 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); -- 2.7.4