if (GenTree::Compare(leftShiftTree->gtGetOp1(), rightShiftTree->gtGetOp1()))
{
GenTreePtr rotatedValue = leftShiftTree->gtGetOp1();
- ssize_t rotatedValueBitSize = genTypeSize(rotatedValue->gtType) * 8;
+ var_types rotatedValueActualType = genActualType(rotatedValue->gtType);
+ ssize_t rotatedValueBitSize = genTypeSize(rotatedValueActualType) * 8;
noway_assert((rotatedValueBitSize == 32) || (rotatedValueBitSize == 64));
GenTreePtr leftShiftIndex = leftShiftTree->gtGetOp2();
GenTreePtr rightShiftIndex = rightShiftTree->gtGetOp2();
}
else
{
- tree = gtNewOperNode(rotateOp, genActualType(rotatedValue->gtType), rotatedValue, rotateIndex);
+ tree = gtNewOperNode(rotateOp, rotatedValueActualType, rotatedValue, rotateIndex);
noway_assert(inputTreeEffects == (tree->gtFlags & GTF_ALL_EFFECT));
}
volatile uint volatile_field;
+ ushort usfield;
+
[MethodImpl(MethodImplOptions.NoInlining)]
static uint rol32(uint value, int amount)
{
return (value >> 10) | (value << 5);
}
- Test(ulong i, uint j)
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ uint rol32ushort(int amount)
+ {
+ return ((uint)usfield << amount) | ((uint)usfield >> (32 - amount));
+ }
+
+ Test(ulong i, uint j, ushort k)
{
field = i;
volatile_field = j;
+ usfield = k;
}
public static int Main()
return Fail;
}
+ if (test.rol32ushort(25) != 0x68000024)
+ {
+ return Fail;
+ }
+
return Pass;
}
}