Enable GT_CALL with long ret types for x86 RyuJIT
authorMichelle McDaniel <adiaaida@gmail.com>
Tue, 31 May 2016 15:40:16 +0000 (08:40 -0700)
committerMichelle McDaniel <adiaaida@gmail.com>
Wed, 22 Jun 2016 21:05:58 +0000 (14:05 -0700)
commit9237cec8009c478e76c6193a5ea628fc8aaa3bf1
tree45e631924ec019cb49b1dad9102c22b3d3a2a7ef
parent702b73a71b67992bad105c482f5641dfb84893e1
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().
src/jit/codegenxarch.cpp
src/jit/compiler.h
src/jit/gentree.cpp
src/jit/importer.cpp
src/jit/lclvars.cpp
src/jit/lower.cpp
src/jit/morph.cpp