c# - MSIL有ROL和ROR指令吗?

标签 c# clr cil

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

因为它们在乘法和除法中大量使用,所以改进会产生链式 react 。所以我开始创建一个动态方法(低位旋转高位),结果发现没有 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));

关于c# - MSIL有ROL和ROR指令吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3220579/

相关文章:

c# - 为什么静态类被认为是 “classes” 和 “reference types” ?

c# - 为什么对象头大小在 64 位架构中翻了一番?

c# - 删除列表中的重复对象 (C#)

c# - 将大量数据从 C# 导出到 excel 的最佳/最快方法是什么

c++ - LNK2022 使用/clr 时出错

cil - MSIL 引用手册

c# - C# 中的 IL Return 返回错误值

c# - Mono.Cecil:操作可能会在运行时不稳定

c# - '文件已损坏,无法打开' OpenXML

c# visual studio build exe with target anycpu 但在调用进程平台(x86/x64)上确定其平台(x86/x64)