{
GenTreeObj* obj = source->AsObj();
unsigned argBytes = roundUp(obj->gtBlkSize, TARGET_POINTER_SIZE);
+#ifdef _TARGET_X86_
+ // If we have an OBJ, we must have created a copy if the original arg was not a
+ // local and was not a multiple of TARGET_POINTER_SIZE.
+ // Note that on x64/ux this will be handled by unrolling in genStructPutArgUnroll.
+ assert((argBytes == obj->gtBlkSize) || obj->Addr()->IsLocalAddrExpr());
+#endif // _TARGET_X86_
assert((curArgTabEntry->numSlots * TARGET_POINTER_SIZE) == argBytes);
}
#endif // FEATURE_PUT_STRUCT_ARG_STK
unsigned roundupSize = (unsigned)roundUp(originalSize, TARGET_POINTER_SIZE);
var_types structBaseType = argEntry->argType;
-#ifndef _TARGET_X86_
// First, handle the case where the argument is passed by reference.
if (argEntry->passedByRef)
{
else
{
// This is passed by value.
+ CLANG_FORMAT_COMMENT_ANCHOR;
+
+#ifndef _TARGET_X86_
// Check to see if we can transform this into load of a primitive type.
// 'size' must be the number of pointer sized items
assert(size == roundupSize / TARGET_POINTER_SIZE);
size = 1;
}
+#endif // !_TARGET_X86_
#ifndef UNIX_AMD64_ABI
// We still have a struct unless we converted the GT_OBJ into a GT_IND above...
}
#endif // !UNIX_AMD64_ABI
}
-#endif // !_TARGET_X86_
}
if (argEntry->isPassedInRegisters())