[英]GCC w/ inline assembly & -Ofast generating extra code for memory operand
[英]ARM GCC inline assembly error on %w operand
与x86相同,同一编译器可以使用-m32
和-m64
生成x86-32或x86-64代码,您需要为ARM与AArch64分别构建gcc。
ARM gcc接受-march=armv8-a
,但仍在32位ARM模式下编译,而不是AArch64。
我可以使用AArch64 gcc和ARM gcc 在Godbolt编译器资源管理器上重现您的问题。 (并且我提供了一个使用__builtin_clz(uiShift)
而不是内联asm的示例,因此它可以在两种体系结构上编译为clz
指令。)
顺便说一句,您可能在两个操作数上都忽略了w
大小覆盖,而只是将unsigned int
用于输入和输出。 然后,相同的嵌入式asm将与ARM和AArch64一起使用。 (但是__builtin_clz
仍然更好,因为编译器了解它的工作。例如,它知道结果在0..31的范围内,这可能会进行一些优化。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.