gpt4 book ai didi

gcc - 我怎样才能让 ARM MULL 指令在 gcc 的 uint64_t 中产生它的输出?

转载 作者:行者123 更新时间:2023-12-01 01:35:50 25 4
gpt4 key购买 nike

我想在 c99 代码库中引入一些汇编代码。我想用 ARM CPU 的 UMULL 指令乘以 2 uint32_t 并立即将结果转化为 uint64_t。

现在 uint64_t 需要 2 个寄存器,那么如何指定 asm 块的输出和约束?

最佳答案

好问题!

以下代码使用 GCC -O 输出您想要的内容或更高而不诉诸汇编程序:
uint32_t a, b;
uint64_t c;
...
c = (uint64_t)a * (uint64_t)b;

或者如果你觉得你必须使用特定于机器的 asm,你可以去:
uint32_t a, b;
uint64_t c;

asm ("umull %Q0, %R0, %1, %2": "=r"(c) : "r"(a), "r"(b));
c的寄存器名称是寄存器对中的第一个,%Q 和 %R 选择寄存器对的低位和高位 32 位寄存器。参见 gcc/config/arm/arm.md -> umulsidi3 示例。

但是,如果您可以继续使用 C,那么优化器就有机会做更多的事情并且对您的程序的读者更友好。

关于gcc - 我怎样才能让 ARM MULL 指令在 gcc 的 uint64_t 中产生它的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2193542/

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