summaryrefslogtreecommitdiff
path: root/src/jit/lsraarmarch.cpp
diff options
context:
space:
mode:
authorHanjoung Lee <hanjoung.lee@samsung.com>2017-08-29 10:51:40 +0900
committerHanjoung Lee <hanjoung.lee@samsung.com>2017-08-29 10:51:40 +0900
commit2a2ffa5556c6e5a9623683452c28d4514cdae197 (patch)
tree163de555cb17465b8b48dacddb70d9ffc21168e1 /src/jit/lsraarmarch.cpp
parentfbba195bb3ed4f0e52e63abe8fa61181bd6afab7 (diff)
downloadcoreclr-2a2ffa5556c6e5a9623683452c28d4514cdae197.tar.gz
coreclr-2a2ffa5556c6e5a9623683452c28d4514cdae197.tar.bz2
coreclr-2a2ffa5556c6e5a9623683452c28d4514cdae197.zip
[RyuJIT/armel] Fix double reg arg passing
Fix reg count for double arg reg Fix #13622
Diffstat (limited to 'src/jit/lsraarmarch.cpp')
-rw-r--r--src/jit/lsraarmarch.cpp9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/jit/lsraarmarch.cpp b/src/jit/lsraarmarch.cpp
index c53a42618e..022766b3c5 100644
--- a/src/jit/lsraarmarch.cpp
+++ b/src/jit/lsraarmarch.cpp
@@ -299,6 +299,7 @@ void LinearScan::TreeNodeInfoInitPutArgReg(GenTreeUnOp* node)
if (node->TypeGet() == TYP_LONG)
{
node->gtLsraInfo.srcCount++;
+ node->gtLsraInfo.dstCount = node->gtLsraInfo.srcCount;
assert(genRegArgNext(argReg) == REG_NEXT(argReg));
argMask |= genRegMask(REG_NEXT(argReg));
}
@@ -538,6 +539,14 @@ void LinearScan::TreeNodeInfoInitCall(GenTreeCall* call)
assert(argNode->gtRegNum == argReg);
HandleFloatVarArgs(call, argNode, &callHasFloatRegArgs);
info->srcCount++;
+#ifdef ARM_SOFTFP
+ // The `double` types have been transformed to `long` on armel,
+ // while the actual long types have been decomposed.
+ if (argNode->TypeGet() == TYP_LONG)
+ {
+ info->srcCount++;
+ }
+#endif // ARM_SOFTFP
}
}