值大小与约束和修饰符指定的寄存器大小不匹配

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

在arm64中,编译下面的内联汇编会在下面显示警告:

值大小与约束和修饰符[-Wasm-operand-widths]指定的寄存器大小不匹配。

这是因为arm64的寄存器是64位。

int a = 1;
int b = 2;
asm volatile(
   "add %[a], %[a], %[b]  \n"
   :
   [a] "+r"(a)
   :
   [b] "r"(b)
   :
    );

并且clang给出修复建议,使用约束修饰符“w”。

arm clang inline-assembly arm64
1个回答
0
投票

这个警告的关键是无与伦比的。在arm64中,寄存器是64位宽度,但int / float变量是32位。如果类型为double / int64_t或变量是指针,则不会引发警告。所以,你可以尝试一下。

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