MSIL имеет ROL и инструкции ROR?

Я записал тип Int128, и он работает отлично. Я думал, что мог изменить к лучшему его производительность с простой идеей: Улучшите операции сдвига, которые немного неуклюжи.

Поскольку они в большой степени используются в умножении и разделении, улучшение имело бы волновой эффект. Таким образом, я начал создавать динамический метод (чтобы сместиться низко и вращаться высоко), только обнаружить, что нет никаких OpCodes. Rol или OpCodes. Инструкции Ror.

Действительно ли это возможно в IL?

5
задан codekaizen 6 August 2019 в 00:49
поделиться

1 ответ

Нет.

Вам необходимо реализовать это с помощью битовых сдвигов

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));
5
ответ дан 14 December 2019 в 04:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: