ошибка ассемблера clang: неоднозначный размер операнда для инструкции - PullRequest
0 голосов
/ 02 мая 2019

Я пытаюсь собрать tinymembench с помощью clang и получаю ошибки в коде сборки. Я могу исправить простые (удалить .func / .endfunc's), но ошибки «неоднозначный размер операнда для инструкции» при добавлении и вложении превосходят мои минимальные навыки сборки. Я разместил проблему в репо, но, возможно, она больше не поддерживается.

Используя этот исходный файл (удаляет .func / .endfunc), я получаю сообщения об ошибках типа:

$ clang-8 x86-sse2.S /tmp/x86-sse2-dbaa71.s:86:9: error: ambiguous operand size for instruction 'add' add SRC, 64 ^~~ /tmp/x86-sse2-dbaa71.s:87:9: error: ambiguous operand size for instruction 'add' add DST, 64 ^~~ /tmp/x86-sse2-dbaa71.s:88:9: error: ambiguous operand size for instruction 'sub' sub SIZE, 64 ^~~~ ...

Я посмотрел на этот ответ , который выглядит примерно так, но я не смог перевести его в ответ на эти инструкции.

1 Ответ

2 голосов
/ 02 мая 2019

Я могу исправить простые (удалить .func / .endfunc's)

Макрос .func включает .set SRC, rsi, который определяет регистры в соответствии с соответствующим соглашением о вызовах (x86-64 System V, Windows x64 или 32-разрядная с аргументами стека).

При удалении остается только неопределенный символ SRC, который, конечно, рассматривается как операнд памяти.(И у add mem, imm нет ни одного операнда, подразумевающего размер операнда, поэтому он неоднозначен.)

Ваше исправление внесло эту ошибку.


Использование clang -no-integrated-as, чтобы использовать системный ассемблер вместо встроенного ассемблера clang. Как и ожидалось, он прекрасно собирается https://github.com/letrout/tinymembench/blob/master/x86-sse2.S на моем рабочем столе Linux с clang7.0.1.(И системный ассемблер = GNU Binutils as 2.31.1)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...