TargetInfo
Clang имеет метод, называемый getClobbers
:Что такое клоббер?
возвращает строку целевых конкретных затирает, в формате LLVM.
Итак, что такое clobber?
TargetInfo
Clang имеет метод, называемый getClobbers
:Что такое клоббер?
возвращает строку целевых конкретных затирает, в формате LLVM.
Итак, что такое clobber?
Скребковый регистр - это регистр, который разбит, т. Е. Изменен непредсказуемым образом встроенным ассемблером. Обычно это происходит, когда вам нужен темп. зарегистрировать или использовать определенную инструкцию, которая, как правило, модифицирует некоторый регистр в качестве побочного продукта.
Обычно программист явно объявляет регистры, которые сбиты его встроенным кодом asm, но некоторые из них могут считаться оборванными по умолчанию, и именно здесь вступает в игру getClobbers
.
getClobbers
возвращает пустой результат для большинства целей. В MIPS GCC исторически не использовал $1
в сгенерированном коде, поэтому большинство программистов не удосужились объявить его как сбитое. Чтобы уменьшить затраты на переносимость, LLVM считает, что $1
всегда будет сбиваться в линию asm.
Возможно, стоит добавить, что «trashed» здесь означает, что код ассемблера должен использовать регистры (регистр можно рассматривать как очень быструю временную переменную, встроенную в CPU вместо того, чтобы быть на отдельном чипе RAM, если вы незнакомы с ассемблером), и поэтому не будет сохранять значения, введенные в них. – uliwitness
@uliwitness Спасибо, добавлено. – yugr