有人可以帮我理解这段 x86 程序集吗?

问题描述 投票:0回答:1

我需要使用 intrincics 将一段代码转换为 SIMD。 所以我首先查看了当时非 SIMD 代码的反汇编。 我发现编译器似乎做了一些我不明白的技巧。

这是反汇编(抱歉无法复制粘贴,只能截图):

有人可以帮我解释一下吗? 我不明白这一行是如何编译的:

chk = x ^ (x<<1);
(x 是一个 32 位有符号整数。符号位与其右侧的位进行异或运算) 以及如何比较 <0 is done after that.

assembly x86 disassembly
1个回答
1
投票

lea eax, [rcx + rcx]
正在做
eax = ecx + ecx = 2 * ecx = ecx << 1
,这是你的
x << 1
。 然后
xor eax, ecx
计算
x ^ (x << 1)
xor edx, 7FFFFFFFh
正如其所说。 最后
cmovns edx, ecx
有条件地撤消该
xor

© www.soinside.com 2019 - 2024. All rights reserved.