From 0ce4fab8647ac3fbc200c27adfcf31aaae0f660b Mon Sep 17 00:00:00 2001 From: Hyeongseok Oh Date: Thu, 29 Jun 2017 03:01:18 +0900 Subject: [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 --- src/jit/gtstructs.h | 3 +++ 1 file changed, 3 insertions(+) (limited to 'src/jit/gtstructs.h') 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) -- cgit v1.2.3