2017-01-27 4 views

Antwort

5

Ein geblocktes Register ist ein Register, das verworfen wird, d. H. Durch Inline-Assembler in unvorhersehbarer Weise modifiziert wird. Dies geschieht normalerweise, wenn Sie eine Temp. Benötigen. Registrieren oder verwenden Sie eine bestimmte Anweisung, die ein Register als Nebenprodukt ändert.

Normalerweise deklariert der Programmierer explizit Register, die durch seinen Inline-asm-Code geplottert werden, aber einige können standardmäßig als trashed betrachtet werden, und hier kommt getClobbers ins Spiel.

getClobbers gibt für die meisten Ziele ein leeres Ergebnis zurück. Auf MIPS hat GCC historisch $1 im generierten Code nicht verwendet, also haben die meisten Programmierer nicht die Mühe gemacht, es als clobbered zu erklären. Um die Portabilitätskosten zu reduzieren, betrachtet LLVM $1 immer in Inline-Asm.

+1

Es kann sich lohnen, hinzuzufügen, dass "trashed" hier bedeutet, dass der Assemblercode die Register verwenden muss (ein Register könnte als eine sehr schnelle temporäre Variable in die CPU integriert betrachtet werden, anstatt sich auf einem separaten RAM-Chip zu befinden mit Assembler), und so werden die Werte nicht beibehalten, die der Anrufer ihnen eingegeben hat. – uliwitness

+0

@uliwitness Danke, hinzugefügt. – yugr