Как запросить gcc сбросить встроенное входное значение asm? %0
в следующем примере не сбрасывается до 42
после первого цикла. Поэтому, когда i = 1, %0
значение по-прежнему 0
.Сброс встроенного входа gcc asm
for (int i = 0; i < N; ++i)
asm("label: substract_immediate_value %0,%0,1;"
"compare_immediate_value %0,0;"
"branch_not_equal label"
: /* no outputs */
: /* input */ "r" (42));
Какой процессор это для? В любом случае, используя правильную инструкцию процессора для установки некоторого значения в каком-либо регистре. Обычно мнемоника что-то вроде 'mov',' move', 'set',' let' ... – nrz
Какая архитектура? РУКА..? – Michael
Вы лжете GCC о том, что вы делаете: разделы выходов и сбросов пустые, но вы мутируете содержимое регистра. Вам нужно сообщить gcc, что суби будут мусорным регистром. Поэтому добавьте временный либо в выходы, либо в раздел сбрасывания, и используйте для вывода subi вместо% 0. – moonshadow