2017-01-27 13 views

ответ

5

Скребковый регистр - это регистр, который разбит, т. Е. Изменен непредсказуемым образом встроенным ассемблером. Обычно это происходит, когда вам нужен темп. зарегистрировать или использовать определенную инструкцию, которая, как правило, модифицирует некоторый регистр в качестве побочного продукта.

Обычно программист явно объявляет регистры, которые сбиты его встроенным кодом asm, но некоторые из них могут считаться оборванными по умолчанию, и именно здесь вступает в игру getClobbers.

getClobbers возвращает пустой результат для большинства целей. В MIPS GCC исторически не использовал $1 в сгенерированном коде, поэтому большинство программистов не удосужились объявить его как сбитое. Чтобы уменьшить затраты на переносимость, LLVM считает, что $1 всегда будет сбиваться в линию asm.

+1

Возможно, стоит добавить, что «trashed» здесь означает, что код ассемблера должен использовать регистры (регистр можно рассматривать как очень быструю временную переменную, встроенную в CPU вместо того, чтобы быть на отдельном чипе RAM, если вы незнакомы с ассемблером), и поэтому не будет сохранять значения, введенные в них. – uliwitness

+0

@uliwitness Спасибо, добавлено. – yugr