RyuJIT/ARM32: Update GT_PUTARG_REG codegen.
authorMikhail Skvortcov <m.skvortcov@partner.samsung.com>
Thu, 27 Apr 2017 10:54:35 +0000 (13:54 +0300)
committerMikhail Skvortcov <m.skvortcov@partner.samsung.com>
Thu, 27 Apr 2017 10:54:35 +0000 (13:54 +0300)
Commit migrated from https://github.com/dotnet/coreclr/commit/5b7163c660a81ee39a286c2b28f054678c7109c9

src/coreclr/src/jit/codegenarm.cpp

index c28b27b..5650803 100644 (file)
@@ -900,18 +900,18 @@ void CodeGen::genCodeForTreeNode(GenTreePtr treeNode)
             break;
 
         case GT_PUTARG_REG:
-        {
-            NYI_IF(targetType == TYP_STRUCT, "GT_PUTARG_REG: struct support not implemented");
-
-            // commas show up here commonly, as part of a nullchk operation
-            GenTree* op1 = treeNode->gtOp.gtOp1->gtEffectiveVal();
-            // If child node is not already in the register we need, move it
-            genConsumeReg(op1);
-            if (treeNode->gtRegNum != op1->gtRegNum)
+            assert(targetType != TYP_STRUCT); // Any TYP_STRUCT register args should have been removed by
+                                              // fgMorphMultiregStructArg
+            // We have a normal non-Struct targetType
             {
-                inst_RV_RV(ins_Move_Extend(targetType, true), treeNode->gtRegNum, op1->gtRegNum, targetType);
+                GenTree* op1 = treeNode->gtOp.gtOp1;
+                // If child node is not already in the register we need, move it
+                genConsumeReg(op1);
+                if (targetReg != op1->gtRegNum)
+                {
+                    inst_RV_RV(ins_Copy(targetType), targetReg, op1->gtRegNum, targetType);
+                }
             }
-        }
             genProduceReg(treeNode);
             break;