Wo sind die Parameterübergabekonventionen von gcc dokumentiert? Gibt es auch eine Dokumentation über die Art, wie gcc die Register verwendet?
http://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_reg_usage http://www.rn-wissen.de/index.php/Avr-gcc/Interna#Registerverwendung
Besten Dank.
Da ist allerdings nicht alles beschrieben. Wenn du zB eine Funktion mit 20 Parametern hast, passen können die nicht alle in Registern übergeben werden. Parameter, die nicht in Registern übergeben werden, werden im Stack übergeben. Das ist zB auch die Parameter einer varargs-Funktion wie printf.
Johann L. schrieb: > Wenn du zB eine Funktion mit > 20 Parametern hast, passen können die nicht alle in Registern übergeben > werden. Ich kann mich beherrschen... > Parameter, die nicht in Registern übergeben werden, werden im Stack > übergeben. Das ist zB auch die Parameter einer varargs-Funktion wie > printf. Ja, darüber bin ich mittlerweile auch schon gestolpert. Wichtig ist die Information zu varargs. Große Parameterliste verbieten sich auf diesen kleinen Dingern sowieso von vorn herein. Gibt es für die avr-Version von gas irgendwo Spezifikationen der Hardwarespezifika?
Doe Spezifikation der Spezifikation? Da meinst das da? http://sourceware.org/cgi-bin/cvsweb.cgi/src/include/opcode/avr.h?rev=1.16&content-type=text/x-cvsweb-markup&cvsroot=src http://sourceware.org/cgi-bin/cvsweb.cgi/src/gas/config/tc-avr.c?rev=1.79&content-type=text/x-cvsweb-markup&cvsroot=src
Übrigens stimmt (avr-libc) > 8-bit return values are zero/sign-extended to > 16 bits by the called function schon seit einiger Zeit für avr-gcc nicht mehr, d.h. für avr-gcc >= 4.3.
Johann L. schrieb: > Da meinst das da? Ich sah es mehr von außen: sizeof .word, .long...
Du willst Sachen wissen.... einfach angucken was es macht :-) Oder in gas/binutils Mailing-Liste nachfragen. Oder schauen wie's gcc verwendet.
Johann L. schrieb: > Du willst Sachen wissen.... Ja, und fieserweise genau die Sachen, die sie im Handbuch des portablen gas weggelassen haben ;-)