Fixes for 16-byte struct argument passing for ARM64
authorBrian Sullivan <briansul@microsoft.com>
Fri, 4 Mar 2016 22:39:36 +0000 (14:39 -0800)
committerBrian Sullivan <briansul@microsoft.com>
Sat, 5 Mar 2016 00:55:58 +0000 (16:55 -0800)
commitffaa36fe22db1fd5542b6d645825bb856961eb3e
tree4cc329f26acac81a6769ec8f06a6e144c859d8c3
parenta43659055974983c910d421144f749498f9f66a4
Fixes for 16-byte struct argument passing for ARM64

Workarounds to fix Issue 3151 and Issue 2987
14 additional tests are now passing
When passing two register TYP_STRUCT type suisng PUTARG_REG we add a physical register kill for the second register
When generating code for a 16-byte GT_LDOJ that conbatisn GC references we reverse the instructions when necessary
Added new utility method lvIsMultiregStruct() that returns true for the ARM64 16-byte struct type
Updated Tests.lst file
src/jit/codegenarm64.cpp
src/jit/codegencommon.cpp
src/jit/compiler.cpp
src/jit/compiler.h
src/jit/gentree.cpp
src/jit/lclvars.cpp
src/jit/lsra.cpp
src/jit/morph.cpp
src/jit/regalloc.cpp
tests/arm64/Tests.lst