考虑下面的代码。我们知道一个__uint128_t变量存储在 2 个 64 位寄存器中(假设 x64 处理器)。要求是将前 64 位存储在一个 unsigned long 变量中,并将接下来的 64 位存储在另一个 unsigned long 变量中。
__uint128_t a = SOMEVALUE;
unsigned long b = a&0xffffffffffffffff;
unsigned long c = a>>64;
Run Code Online (Sandbox Code Playgroud)
这里,b存储前 64 位,c存储接下来的 64 位。有没有其他更简单的方法来分别访问两个寄存器而不是执行&和>>操作?我问这个问题是因为对于我的项目,这部分代码将被执行一万亿次以上。所以这个疑问还是先验证一下比较好。
有什么汇编代码可以让我闲逛吗?