From 2a2ffa5556c6e5a9623683452c28d4514cdae197 Mon Sep 17 00:00:00 2001 From: Hanjoung Lee Date: Tue, 29 Aug 2017 10:51:40 +0900 Subject: [PATCH] [RyuJIT/armel] Fix double reg arg passing Fix reg count for double arg reg Fix #13622 --- src/jit/lsraarmarch.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/jit/lsraarmarch.cpp b/src/jit/lsraarmarch.cpp index c53a426..022766b 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 } } -- 2.7.4