[linux-l] Frage an Compilerspezialisten

Frank Reker frank at reker.net
Di Dez 7 00:15:35 CET 2004


Jan-Benedict Glaw disse:
> On Sun, 2004-12-05 15:01:12 +0100, Juergen Rienaecker
> <j.rienaecker at arcor.de>
> wrote in message <41B314A8.86D9F91A at arcor.de>:
>>       "=o" (regs[1]),
>>       "=o" (regs[2]), "=o" (regs[3])
>
> Vor dem ersten Doppelpunkt stehen alle Register/Variablen, die in der
> Assembler-Anweisung als Output benutzt werden--hier werden also drei
> Ausgaben erwartet.

Um genau zu sein, ist das schon der zweite doppelpunkt -
vor dem ersten steht naemlich die asm-anweisung ;-))


>> :    "ebx", "ecx", "edx");
>
> ...und dem 2ten Doppelpunkt folgen alle Register, die innerhalb des
> asm()-Statements verändert worden sein könnten, sodaß der GCC nun
> weiß,
> welche Variablen, Konstanten etc.  er nun ggf. nochmals aus anderen
> Quellen nachladen muß.
[...]
> Alternativ könnte man ein weiteres Register clobbern, EBX darin
> zwischenspeichern und am Ende des asm()-Statements wieder
> restaurieren,
> falls EBX hier wirklich benutzt werden muß. ...ansonsten halt einfach
> ein anderes Register nehmen :)

Wird ja auf dem stack gesichert und zurueckgeladen. ebx ist also
nicht wirklich geclobbert. Es sollte also reichen hinter
dem letzten doppelpunkt das "ebx" zu entfernen.


-- 
Don't worry be happy...
Ciao Frank



Mehr Informationen über die Mailingliste linux-l