assertImp(varTypeIsStruct(op2));
op1 = impAssignStructPtr(op1, op2, resolvedToken.hClass, (unsigned)CHECK_SPILL_ALL);
+
+ if (op1->OperIsBlkOp() && (prefixFlags & PREFIX_UNALIGNED))
+ {
+ op1->gtFlags |= GTF_BLK_UNALIGNED;
+ }
goto SPILL_APPEND;
}
// Could point anywhere, example a boxed class static int
op1->gtFlags |= GTF_IND_TGTANYWHERE | GTF_GLOB_REF;
assertImp(varTypeIsArithmetic(op1->gtType));
-
- if (prefixFlags & PREFIX_UNALIGNED)
- {
- op1->gtFlags |= GTF_IND_UNALIGNED;
- }
}
else
{
}
op1->gtFlags |= GTF_EXCEPT;
+ if (prefixFlags & PREFIX_UNALIGNED)
+ {
+ op1->gtFlags |= GTF_IND_UNALIGNED;
+ }
+
impPushOnStack(op1, tiRetVal);
break;
}
requiresCopyBlock = true;
}
+#if defined(_TARGET_ARM_)
+ if ((rhs->OperIsIndir()) && (rhs->gtFlags & GTF_IND_UNALIGNED))
+ {
+ JITDUMP(" rhs is unaligned");
+ requiresCopyBlock = true;
+ }
+
+ if (asg->gtFlags & GTF_BLK_UNALIGNED)
+ {
+ JITDUMP(" asg is unaligned");
+ requiresCopyBlock = true;
+ }
+#endif // _TARGET_ARM_
+
if (dest->OperGet() == GT_OBJ && dest->AsBlk()->gtBlkOpGcUnsafe)
{
requiresCopyBlock = true;