размер значения не соответствует размеру регистра, указанному в ограничителе и модификаторе - PullRequest
0 голосов
/ 04 марта 2019

В 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".

1 Ответ

0 голосов
/ 06 марта 2019

Ключ к этому предупреждению не имеет аналогов.В arm64 регистр имеет ширину 64 бита, а переменные int / float - 32 бита.И если тип double / int64_t или переменная является указателем, это не вызовет предупреждение.Итак, вы можете попробовать способ.

...