#ifndef LEGACY_BACKEND
else if (size > 4 && passUsingIntRegs)
{
- NYI("Struct can be split between registers and stack");
+ NYI_ARM("Struct can be split between registers and stack");
}
#endif // !LEGACY_BACKEND
#endif // _TARGET_ARM_
#ifdef _TARGET_ARM_
if (fltArgRegNum > MAX_FLOAT_REG_ARG)
{
+#ifndef LEGACY_BACKEND
+ NYI_ARM("Struct split between float registers and stack");
+#endif // !LEGACY_BACKEND
// This indicates a partial enregistration of a struct type
assert(varTypeIsStruct(argx));
unsigned numRegsPartial = size - (fltArgRegNum - MAX_FLOAT_REG_ARG);
#ifdef _TARGET_ARM_
if (intArgRegNum > MAX_REG_ARG)
{
+#ifndef LEGACY_BACKEND
+ NYI_ARM("Struct split between integer registers and stack");
+#endif // !LEGACY_BACKEND
// This indicates a partial enregistration of a struct type
assert((isStructArg) || argx->OperIsCopyBlkOp() ||
(argx->gtOper == GT_COMMA && (args->gtFlags & GTF_ASG)));
}
#endif // !LEGACY_BACKEND
-#if !defined(_TARGET_64BIT_) && !defined(LEGACY_BACKEND)
+#if defined(_TARGET_X86_) && !defined(LEGACY_BACKEND)
if (isStructArg)
{
GenTree* lclNode = fgIsIndirOfAddrOfLocal(argx);
}
}
}
-#endif // defined (_TARGET_64BIT_) && !defined(LEGACY_BACKEND)
+#endif // _TARGET_X86_ && !LEGACY_BACKEND
#ifdef FEATURE_UNIX_AMD64_STRUCT_PASSING
if (isStructArg && !isRegArg)
#elif defined(_TARGET_ARM_)
BYTE gcPtrs[4] = {TYPE_GC_NONE, TYPE_GC_NONE, TYPE_GC_NONE, TYPE_GC_NONE};
elemCount = (unsigned)roundUp(structSize, TARGET_POINTER_SIZE) / TARGET_POINTER_SIZE;
+ info.compCompHnd->getClassGClayout(objClass, &gcPtrs[0]);
for (unsigned inx = 0; inx < elemCount; inx++)
{
- gcPtrs[inx] = TYPE_GC_NONE;
- info.compCompHnd->getClassGClayout(objClass, &gcPtrs[inx]);
type[inx] = getJitGCType(gcPtrs[inx]);
}
#endif // _TARGET_ARM_
for (unsigned inx = 0; inx < elemCount; inx++)
{
- varDscs[inx] = &lvaTable[inx];
+ varDscs[inx] = &lvaTable[varNums[inx]];
varType[inx] = varDscs[inx]->lvType;
if (varTypeIsFloating(varType[inx]))
{