arm - 值大小与约束和修饰符指定的寄存器大小不匹配
问题描述
在 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”。
解决方案
这个警告的关键是无与伦比的。在 arm64 中,寄存器是 64 位宽,但 int/float 变量是 32 位。如果类型是 double/int64_t 或变量是指针,则不会引起警告。所以,你可以试试这个方法。
推荐阅读
- php - 将零替换为免费的 WooCommerce 单个产品页面上的运费
- html - 尝试在 Django 模板中加载多个 Cloudinary 图像
- php - 使用 PHP 将 HTML 表单与 MySQL 数据库连接
- python - Python:不使用json将文件中的嵌套数据读取到嵌套字典中
- android - 在 Android 手机上设置 Zoiper 帐户
- matplotlib - 谁能告诉我 MatPlotLib 中这个 ValueError 的解决方案?
- php - Elasticsearch - 如何使用 Elasticsearch-PHP 客户端创建丰富策略,而不会出现明显存在的端点的未找到错误?
- splidejs - 如何让幻灯片在 Splidejs 中自动播放
- java - 如何将字符串转换为 LocalDate
- php - 无法使用 FPDF 在 PHP 中附加生成的 PDF