这是从一个更大的示例简化而来的。
在C源代码中,我有:
uint32_t xx = oxdeadbeef ;
我用 gcc -O 或 clang -O 编译
查看 RPi 4 上的“objdump -d a.out”,我明白了
9ac: 5297dde8 mov w8, #0xbeef // #48879
9b0: 72bbd5a8 movk w8, #0xdead, lsl #16
这会产生正确的结果,但是,这些是 16 位值。 在这种情况下,如何强制 gcc 或 clang 使用 32 位?
mov w8, #0xdeadbeef
或者,我愿意吗?
该微控制器没有将立即数 32 值移动到寄存器中,只有 16 位。 2条指令比将值存储在内存中并从内存加载到寄存器更快更短。
这就是为什么你有 2 条说明的原因。