summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarol Eidt <carol.eidt@microsoft.com>2017-08-09 21:27:20 -0700
committerGitHub <noreply@github.com>2017-08-09 21:27:20 -0700
commitdc2ffcdff2fb19e4b252cec3bc6672400a375c1e (patch)
tree68acc5f6bad1963bdb3560c35f23d9a650267c34
parentf02652b9846d624daa8020c36b0fc2867970a571 (diff)
parent6572d0131cc76f519d031277007e0fc229a7fef7 (diff)
downloadcoreclr-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.h11
-rw-r--r--src/jit/regset.cpp2
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