diff options
author | Hyeongseok Oh <hseok82.oh@samsung.com> | 2017-06-29 03:01:18 +0900 |
---|---|---|
committer | Bruce Forstall <brucefo@microsoft.com> | 2017-06-28 11:01:18 -0700 |
commit | 0ce4fab8647ac3fbc200c27adfcf31aaae0f660b (patch) | |
tree | 18e3162db4f7b757906c20d006286b2094f923fa /src/jit/gtstructs.h | |
parent | 217ab30d021f27be6fe4f35126a88e592366acbf (diff) | |
download | coreclr-0ce4fab8647ac3fbc200c27adfcf31aaae0f660b.tar.gz coreclr-0ce4fab8647ac3fbc200c27adfcf31aaae0f660b.tar.bz2 coreclr-0ce4fab8647ac3fbc200c27adfcf31aaae0f660b.zip |
[RyuJIT/ARM32] Enable passing large split struct argument (#12050)
* [RyuJIT/ARM32] Enable passing large split struct
This enables passing split struct larger than 16 bytes.
To support splitted struct, it defines new GenTree type - GenTreePutArgSplit.
GenTreePutArgSplit is similar with GenTreePutArgStk,
but it is used for splitted struct only
and it has additional field to save register information.
GenTreePutArgSplit node is generated in lower phase.
* Apply reviews: split struct argument passing
- Fix some comments:
genPutArgSplit, GenTreePutArgStk, GenTreePutArgSplit, NuwPutArg, ArgComplete
- Add assertion check in genPutArgSplit, genCallInstruction
- Rename variable: baseReg
- Change flag for GenTreePutArgSplit: _TARGET_ARM && !LEGACY_BACKEND
- Change type of gtOtherRegs in GenTreePutArgSplit
- Remove duplicated code: NewPutArg
- Implement spill & restore flag for GenTreePutArgSplit
* Apply reviews
- Rebase
- Update managing spillFlag for split struct
- Implement spill & restore code generation
- Fix typos and rename variables
- Fix bug related to print gentree for split struct
* Fix bug and comments
- Fix bug in regset.cpp
- Add comments in morph.cpp's NYI_ARM
- Fix comments' typo in lsraarmarcp.cpp
Diffstat (limited to 'src/jit/gtstructs.h')
-rw-r--r-- | src/jit/gtstructs.h | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/src/jit/gtstructs.h b/src/jit/gtstructs.h index 898aeec002..fa462ad328 100644 --- a/src/jit/gtstructs.h +++ b/src/jit/gtstructs.h @@ -96,6 +96,9 @@ GTSTRUCT_1(PhiArg , GT_PHI_ARG) GTSTRUCT_1(StoreInd , GT_STOREIND) GTSTRUCT_N(Indir , GT_STOREIND, GT_IND, GT_NULLCHECK, GT_BLK, GT_STORE_BLK, GT_OBJ, GT_STORE_OBJ, GT_DYN_BLK, GT_STORE_DYN_BLK) GTSTRUCT_1(PutArgStk , GT_PUTARG_STK) +#if !defined(LEGACY_BACKEND) && defined(_TARGET_ARM_) +GTSTRUCT_1(PutArgSplit , GT_PUTARG_SPLIT) +#endif GTSTRUCT_1(PhysReg , GT_PHYSREG) #ifdef FEATURE_SIMD GTSTRUCT_1(SIMD , GT_SIMD) |