gpt4 book ai didi

c - 如何从 C 代码中获取单操作数 imul

转载 作者:行者123 更新时间:2023-11-30 21:17:42 25 4
gpt4 key购买 nike

我必须用 C 语言编写什么才能让汇编器用一个操作数显示 imul ?例如:

imul  %ebp

最佳答案

如果您想编写 C 代码,以便编译器使用一个操作数发出 imul,那么唯一的方法是使用加宽有符号乘法,即强制转换操作数)到有符号类型两倍的寄存器长度。因此,在 32 位模式下,以下代码将产生预期的输出

long long multiply(int x, int y) {
return (long long)x * y;
}

因为non-widening multiplication in 2's complement is the same for both signed and unsigned types ,编译器几乎总是使用多操作数 imul,因为它更快、更灵活。

在 x86_64 中,即使输入仅为 32 位,编译器也使用多操作数 imul 来生成 64 位结果,因为它们通常仍然比单操作数 imul 具有更好的延迟和吞吐量。因此,您还必须使用如上所述的双寄存器宽度(128 位)类型。不过,Clang、ICC 和 GCC 确实通过 __int128 支持这一点。

下面的代码片段

__int128_t multiply(long long x, long long y) {
return (__int128_t)x * y;
}

将是compiled to

mov     rax, rdi
imul rsi
ret

如果您使用 MSVC,则可以使用 _umul128 64 位模式

关于c - 如何从 C 代码中获取单操作数 imul,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36381376/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com