diff options
author | Carol Eidt <carol.eidt@microsoft.com> | 2017-08-09 21:27:20 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-08-09 21:27:20 -0700 |
commit | dc2ffcdff2fb19e4b252cec3bc6672400a375c1e (patch) | |
tree | 68acc5f6bad1963bdb3560c35f23d9a650267c34 | |
parent | f02652b9846d624daa8020c36b0fc2867970a571 (diff) | |
parent | 6572d0131cc76f519d031277007e0fc229a7fef7 (diff) | |
download | coreclr-dc2ffcdff2fb19e4b252cec3bc6672400a375c1e.tar.gz coreclr-dc2ffcdff2fb19e4b252cec3bc6672400a375c1e.tar.bz2 coreclr-dc2ffcdff2fb19e4b252cec3bc6672400a375c1e.zip |
Merge pull request #13284 from wateret/fix-13281
[RyuJIT/arm32] Fix Regression
-rw-r--r-- | src/jit/gentree.h | 11 | ||||
-rw-r--r-- | src/jit/regset.cpp | 2 |
2 files changed, 11 insertions, 2 deletions
diff --git a/src/jit/gentree.h b/src/jit/gentree.h index 54545aa896..f488d4d205 100644 --- a/src/jit/gentree.h +++ b/src/jit/gentree.h @@ -4012,7 +4012,16 @@ struct GenTreeMultiRegOp : public GenTreeOp var_types GetRegType(unsigned index) { assert(index < 2); - var_types result = TYP_INT; // XXX + // The type of register is usually the same as GenTree type + // since most of time GenTreeMultiRegOp uses only a single reg (when gtOtherReg is REG_NA). + // The special case is when we have TYP_LONG here, which was `TYP_DOUBLE` originally + // (copied to int regs for argument push on armel). Then we need to separate them into int for each index. + var_types result = TypeGet(); + if (result == TYP_LONG) + { + assert(gtOtherReg != REG_NA); + result = TYP_INT; + } return result; } diff --git a/src/jit/regset.cpp b/src/jit/regset.cpp index e73b64598f..7fc7767012 100644 --- a/src/jit/regset.cpp +++ b/src/jit/regset.cpp @@ -1552,7 +1552,7 @@ void RegSet::rsSpillTree(regNumber reg, GenTreePtr tree, unsigned regIdx /* =0 * else if (tree->OperIsMultiRegOp()) { multiReg = tree->AsMultiRegOp(); - treeType = multiReg->GetRegType(regIdx); // XXX check + treeType = multiReg->GetRegType(regIdx); } #endif // _TARGET_ARM_ else |