MSIL是否具有ROL和ROR指令?

Ter*_*ver 5 c# clr cil

我写了一个Int128类型,效果很好。我以为我可以通过一个简单的想法来改进它的性能:改进一些笨拙的换档操作。

因为它们在乘法和除法中大量使用,所以改进会产生连锁反应。因此,我开始创建一个动态方法(低调并高调旋转),只是发现没有OpCodes.Rol或OpCodes.Ror指令。

IL有可能吗?

cod*_*zen 5

没有。

您需要通过移位来实现它

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));
Run Code Online (Sandbox Code Playgroud)