summaryrefslogtreecommitdiff
path: root/src/jit/lclvars.cpp
diff options
context:
space:
mode:
authorMichelle McDaniel <adiaaida@gmail.com>2016-05-31 08:40:16 -0700
committerMichelle McDaniel <adiaaida@gmail.com>2016-06-22 14:05:58 -0700
commit9237cec8009c478e76c6193a5ea628fc8aaa3bf1 (patch)
tree45e631924ec019cb49b1dad9102c22b3d3a2a7ef /src/jit/lclvars.cpp
parent702b73a71b67992bad105c482f5641dfb84893e1 (diff)
downloadcoreclr-9237cec8009c478e76c6193a5ea628fc8aaa3bf1.tar.gz
coreclr-9237cec8009c478e76c6193a5ea628fc8aaa3bf1.tar.bz2
coreclr-9237cec8009c478e76c6193a5ea628fc8aaa3bf1.zip
Enable GT_CALL with long ret types for x86 RyuJIT
1) Enables genMultiRegCallStoreToLocal for x86 RyuJIT. Forces long return types to be stored to the stack after returning from a call. 2) Update lvaPromoteLongVars to not promote a long if it is a multi reg arg or ret. 3) Adds NYI for call arguments that are longs and contain adds or subtracts. We are currently producing the wrong order of operations so that we can push the argument immediately after performing the arithmetic. We will do the hi adc/sbb before the carry bit has been set by doing the lo operation. 4) Adds an NYI for morphing a node into a call node if the call will have a long return type. 5) Moves the logic for forcing var = call() for calls with long return types to lower::DecomposeNode().
Diffstat (limited to 'src/jit/lclvars.cpp')
-rw-r--r--src/jit/lclvars.cpp2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/jit/lclvars.cpp b/src/jit/lclvars.cpp
index eae804a429..2d21856041 100644
--- a/src/jit/lclvars.cpp
+++ b/src/jit/lclvars.cpp
@@ -1747,7 +1747,7 @@ void Compiler::lvaPromoteLongVars()
lclNum++)
{
LclVarDsc * varDsc = &lvaTable[lclNum];
- if(!varTypeIsLong(varDsc) || varDsc->lvDoNotEnregister || (varDsc->lvRefCnt == 0))
+ if(!varTypeIsLong(varDsc) || varDsc->lvDoNotEnregister || varDsc->lvIsMultiRegArgOrRet || (varDsc->lvRefCnt == 0))
{
continue;
}