Я записал тип Int128, и он работает отлично. Я думал, что мог изменить к лучшему его производительность с простой идеей: Улучшите операции сдвига, которые немного неуклюжи.
Поскольку они в большой степени используются в умножении и разделении, улучшение имело бы волновой эффект. Таким образом, я начал создавать динамический метод (чтобы сместиться низко и вращаться высоко), только обнаружить, что нет никаких OpCodes. Rol или OpCodes. Инструкции Ror.
Действительно ли это возможно в IL?
Нет.
Вам необходимо реализовать это с помощью битовых сдвигов
UInt64 highBits = 0;
UInt64 lowBits = 1;
Int32 n = 63;
var altShift = (n - 63);
var lowShiftedOff = (n - 63) > 0 ? 0 : (lowBits << n);
var highShiftedOff = (n - 63) > 0 ? 0 : (highBits << n);
var highResult = (UInt64)(highShiftedOff | (altShift > 0 ? (lowBits << altShift - 1) : 0));
var lowResult= (UInt64)(lowShiftedOff | (altShift > 0 ? (highBits << altShift - 1) : 0));