asm: impossible constraint in 'asm'

Модератор: Модераторы разделов

IMB
Сообщения: 2430
ОС: Debian

asm: impossible constraint in 'asm'

Сообщение IMB » 14.07.2016 18:13

Доброго дня!
Пробую собрать protobuf для архитектуры SH4, сборка останавливается с сообщенеи о некорректности asm - google/protobuf/stubs/atomicops_internals_mips_gcc.h:69: error: impossible constraint in 'asm'

Код: Выделить всё

inline Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr,
                                         Atomic32 old_value,
                                         Atomic32 new_value) {
  Atomic32 prev, tmp;
  __asm__ __volatile__(".set push\n"
                       ".set noreorder\n"
                       "1:\n"
                       "ll %0, %5\n"  // prev = *ptr
                       "bne %0, %3, 2f\n"  // if (prev != old_value) goto 2
                       "move %2, %4\n"  // tmp = new_value
                       "sc %2, %1\n"  // *ptr = tmp (with atomic check)
                       "beqz %2, 1b\n"  // start again on atomic error
                       "nop\n"  // delay slot nop
                       "2:\n"
                       ".set pop\n"
                       : "=&r" (prev), "=m" (*ptr), "=&r" (tmp)
                       : "Ir" (old_value), "r" (new_value), "m" (*ptr)
                       : "memory"); // 69 строка
  return prev;
}

С asm мне как-то не приходилось сталкиваться, можете подсказать решение?
Спасибо.
Спасибо сказали:

Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 7892
Статус: Маньяк
ОС: Android, GNU/Linux, Windows

Re: asm: impossible constraint in 'asm'

Сообщение serzh-z » 14.07.2016 18:51

IMB
Стоит попробовать заменить "memory" на "m".
Scio me nihil scire.
Спасибо сказали:

IMB
Сообщения: 2430
ОС: Debian

Re: asm: impossible constraint in 'asm'

Сообщение IMB » 15.07.2016 10:08

google/protobuf/stubs/atomicops_internals_mips_gcc.h:69: error: unknown register name 'm' in 'asm'

Возможно важно, что используется достаточно старый gcc, но это к сожалению без вариантов:

Код: Выделить всё

# sh4-linux-g++ --version
sh4-linux-g++ (GCC) 4.2.4 (snapshot) (STMicroelectronics/Linux Base 4.2.4-52)
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 14826
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: asm: impossible constraint in 'asm'

Сообщение Bizdelnick » 15.07.2016 10:43

IMB писал(а):
15.07.2016 10:08
используется достаточно старый gcc, но это к сожалению без вариантов

Почему?

% aptitude show c++-compiler-sh4-linux-gnu Нет в наличии или подходящей версии для c++-compiler-sh4-linux-gnu Пакет: c++-compiler-sh4-linux-gnu Состояние: не реальный пакет Предоставляется: g++-4.3-sh4-linux-gnu, g++-4.4-sh4-linux-gnu, g++-4.5-sh4-linux-gnu, g++-4.6-sh4-linux-gnu, g++-4.7-sh4-linux-gnu %

Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
команда
новичок
нюанс
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 7892
Статус: Маньяк
ОС: Android, GNU/Linux, Windows

Re: asm: impossible constraint in 'asm'

Сообщение serzh-z » 15.07.2016 13:12

IMB
Теоретически, можно вообще убрать "memory" из clobber-списка, так как prev, *ptr, tmp, old_value, new_value уже перечислены выше, а никакая другая память инструкциями выше не затрагивается.
Scio me nihil scire.
Спасибо сказали:

Аватара пользователя
s.xbatob
Сообщения: 619
ОС: RfRemix

Re: asm: impossible constraint in 'asm'

Сообщение s.xbatob » 15.07.2016 17:08

насколько я понимаю, претензии не к содержимому, а к атрибуту директивы. А он ровно один: __volatile__
Спасибо сказали: