www.mikrocontroller.net

Forum: Compiler & IDEs avr-gcc: code optimieren?


Autor: Johann L. (gjlayde) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi, ich wollt mal fragen ob schon mal jemand hier avr-gcc code optimiert 
hat.

Dis Problem ist weniger, die Optimierungen zu machen, sondern ich hab 
überhaupt keinen Plan, wie die zurück in avr-gcc kommen. Das System von 
Mailinglisten ist mir auch net klar, unterhalten sich da nur 
irgendwelche bugzilla maildaemons oder funktioniert das wie ein Forum?

Zudem hab ich keinen Testumgebung, wenn auch ein Testprogramm das ich 
angehängt hab.

Hier mal die Ergebnisse, es geht um die Codegröße.
Übersetzt wurde mit -Os
 avr-gcc |  ohne  mit
---------+------------
 4.2.4   |  504   264
 4.3.2   |  486   272     

Das "ohne" und "mit" bezieht sich darauf, ob der Patch aktiviert ist 
oder nicht.

Wenn das ganze eh in der Tonne landen würde oder ein wochenlanger 
Vollzeitjob wäre, die Änderungen zurückfliessen zu lassen, würd ich es 
sein lassen.


Im wesentlichen geht es um Bit-Manipulationen, wie in der Quelle zu 
sehen.

Grüß, Johann

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Das System von
> Mailinglisten ist mir auch net klar, unterhalten sich da nur
> irgendwelche bugzilla maildaemons oder funktioniert das wie ein Forum?

Das Prinzip einer Mailingliste ist ganz einfach. Jede Mail, die von 
einem Listenteilnehmer an die Listenadresse geschickt wird, wird an alle 
Listenteilnehmer weitergereicht.

Auf AVR-Freaks hast du Bedenken wegen der Menge der Mails geäußert. 
Bezüglich der AVR-GCC-Liste kann ich dich beruhigen, da ist die Anzahl 
der Mails sehr überschaubar. An manchen Tagen bekommt man da nicht eine 
einzige Mail. Und dein Anliegen dürfte da gut hinpassen, also melde dich 
einfach an. Du kannst die Liste auch jederzeit problemlos wieder 
abbestellen.

Autor: Michael G. (linuxgeek) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Johann L. wrote:

> Das "ohne" und "mit" bezieht sich darauf, ob der Patch aktiviert ist
> oder nicht.

Welcher Patch? Wenn Du Dich da an dieser Software versucht hast kann ich 
Dir, ohne den Code dieses Patches zu sehen, mit Sicherheit sagen dass Du 
da etwas massiv kaputt gemacht hast.

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Michael G. wrote:

> Welcher Patch? Wenn Du Dich da an dieser Software versucht hast kann ich
> Dir, ohne den Code dieses Patches zu sehen, mit Sicherheit sagen dass Du
> da etwas massiv kaputt gemacht hast.

Wow, was für eine überhebliche und völlig blödsinnige Aussage.

Wenn du den Patch nicht kennst, worauf basiert denn dann das Urteil?

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@linuxgeek: Unfug!

Compiler sind zwar komplex, aber keine schwarze Magie. Man kann sowas 
lernen, hat vielleicht mal sowas studiert, schon mal mit Internas von 
Compilern zu tun gehabt, ...

Insbesondere Änderungen in der Spezifikation der Zielmaschine (also hier 
AVR) haben durchaus begrenzte Auswirkungen. Wenn ich Johann in der 
Vorgängerdiskussion richtig interpretiert habe, dann handelt es sich um 
AVR-spezifische instruction patterns für Umgang mit Bitfeldern. Und das 
ist überschaubar.

Bischen Einblick in das bevorzugte Prozedere müsste eigentlich Jörg 
Wunsch haben - mal sehen wann er wach ist.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
A. K. wrote:

> Bischen Einblick in das bevorzugte Prozedere müsste eigentlich Jörg
> Wunsch haben - mal sehen wann er wach ist.

Naja, ich weiß einfach nicht, wo ich anfangen soll. ;-)  Wie eine
Mailingliste funktioniert, kann man sich garantiert irgendwo im
Internet anlesen.  avr-gcc-list [at nongnu.org] würde ich auch
empfehlen, aber bitte erst eintragen, dann posten -- dieser Tage
sind praktisch alle Mailinglisten gegen Mails von Nichtmitgliedern
gesperrt, damit die Spamflut in Grenzen bleibt.  Dafür gibt es
einfache Webinterfaces, auf denen man sich schnell ein- und
austragen kann, man kann auch die Mailauslieferung abschalten und
trotzdem eingetragen bleiben (d. h. eigene Postings würden dann
weiter akzeptiert).

http://lists.nongnu.org/mailman/listinfo/avr-gcc-list

Allerdings klingt mir das da oben alles recht konfus, ich habe da
keinen Anfang und kein Ende sehen können.  Wo ist der Patch?  Leider
wird es auch darauf hinaus laufen, dass man sich mit der testsuite
für den GCC wohl oder übel befassen muss.  Erstens darf das Ergebnis
des testsuite-Laufs mit dem Patch natürlich nicht schlechter werden
als ohne, das ist ein grundlegendes Akzeptanzkriterium für GCC.
Zweitens sollte man einen eigenen Test hinzu fügen, der die
Wirksamkeit der Änderung demonstriert und dann auch künftig als
Nachweis dient, dass nicht spätere Codeänderungen das gewünschte
Verhalten aus Versehen wieder kaputt machen.

Wenn das alles getan ist, kann man einen Bugzilla-Eintrag machen
und den Patch auf die GCC-Patch-Mailingliste posten.  Danach muss
man aber noch mächtig am Ball bleiben, damit der Patch schließlich
irgendwann wirklich eingebaut wird.  Ich habe den Patch für die
binären Konstanten (0bXXX) seinerzeit mal durchgedrückt, das hat
ziemlich lange gedauert.  Bei einem rein AVR-spezifischen Teil könnte
das aber einfacher sein, da man nur erstmal ohne Widerspruch von
Denis (Денис Чертыков) auskommen sollte, um danach Anatoly (Анатолий
Соколов) ein wenig zu nerven, dass er es ins GCC-Subversion einpflegt.

Autor: Johann L. (gjlayde) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Michael G. wrote:
> Johann L. wrote:
>
> Welcher Patch? Wenn Du Dich da an dieser Software versucht hast kann ich
> Dir, ohne den Code dieses Patches zu sehen, mit Sicherheit sagen dass Du
> da etwas massiv kaputt gemacht hast.

Die obiger Quelle sammelt ein paar Beispiele, für welche avr-gcc miesen 
Code macht, weil er bestimmte Sachen sehr ineffizient macht.

Anbei die Ausgabe, für Anregungen wäre ich dankbar.
Und insbesondere auch über ein Wort, warum der Code mit "Sicherheit 
falsch" sei.

Mit -fno-split-wide-types wird's nochmal 10 Byte kleiner 
(extract_gprbit).

Autor: Johann L. (gjlayde) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hab mal mit -dP übersetzt, dann sieht man auch die RTL-Pattern im .s

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@gjlyde,

poste doch mal bitte den Patch.

Danke,
Tom

Autor: Johann L. (gjlayde) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
== alter Beitrag entfernt ==

Hier endlich das richtige Patch.

Bei allen Pattern handelt es sich um combiner-Pattern, d.h. sie greifen 
im combine-Pass (*.r162)

Teilweise werden die Pattern nicht genommen, weil sie noch zu teuer sind 
wegen ihrer komplexen rtx-Struktur. Zur Korrektheit tut das aber nix.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rein vom Draufgucken sieht der Patch ja erstmal nicht schlecht aus.
Vom Inhalt verstehst du ohnehin mehr als ich. ;-)

Meta-Informationen with "GJL" sollte da nicht drin stehen: statt
dessen wird von dir erwartet, dass du ein passendes ChangeLog-
Schnipsel mit lieferst, in dem dann auch dein Name auftaucht.
(Sowas vergess ich gern mal, das produziert dann zusätzliche
Nachfragen.)  Ein paar Kommentare, was die Schnipsel machen,
wären m. E. nicht schlecht, eventuell auch als Kommentar über den
ganzen Block obendrüber.  Ja, ich weiß, der Rest von avr.md ist
auch nicht wirklich super kommentiert...

Ansonsten habe ich die restliche Verfahrensweise ja oben beschrieben.
avr-gcc-list ist das sinnvollere Medium für die Diskussion, dort
lesen zumindest noch diejenigen mit, die mit dem Inhalt von avr.md
auch was anfangen können.  Hast du die Testsuite mal laufen lassen
um zu zeigen, dass der Patch keine negativen Auswirkungen darauf
hat?  Schließlich und endlich solltest du noch einen oder mehrere
Tests für die Testsuite erzeugen, die die positiven Wirkungen deines
Patches verifizieren.  In den sauren Apfel habe ich damals für die
0b-Konstanten auch beißen müssen, und das war gut so: es gab noch
einige Fälle (vor allem auf 64-bit-Maschinen), die ich in Folge
interner Überläufe nicht berücksichtigt hatte.

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jörg Wunsch wrote:

> Meta-Informationen ...
schon klar :-)

> Ja, ich weiß, der Rest von avr.md ist
> auch nicht wirklich super kommentiert...
RTL ist selbsterklärend g

> avr-gcc-list ist das sinnvollere Medium für die Diskussion, dort

hmmm sowas wie avr-gcc-devel gibt's net?
   http://lists.nongnu.org/mailman/listinfo/avr-gcc-list
sagt:
>> The list is primarily intented for users of the tools,
>> not for dicussions between developers. Developers should
>> use their respective project mailing lists ...

> Hast du die Testsuite mal laufen lassen um zu zeigen,
> dass der Patch keine negativen Auswirkungen darauf hat?

Tests ...hüstel... gibt's da was für AVR? Momentan bin ich auf
   http://gcc.gnu.org/viewcvs/tags/gcc_4_3_2_release/...

Und vermisse sowas wie avr/ dort. Gibt's irgendwo ne gute Beschreibung 
zum Aufsetzen der Testsuite, wo man nicht auto-xxx und so studiert haben 
muss?

Und dann: Ich fixe ja keine Bugs, wie geht das mit Codegröße vergleichen 
gegen die gcc-4.3.2?

Aber vorher wären erstmal die binutils und multilibs dran. Was für ne 
avr-binutils-Version tut's denn zusammen mit gcc-4.3.2? Hatte da immer 
Probleme mit den neuen Targets weil GCC falschen Assembler erzeugt.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Johann L. wrote:

> hmmm sowas wie avr-gcc-devel gibt's net?

Ja.

>>> The list is primarily intented for users of the tools,
>>> not for dicussions between developers. Developers should
>>> use their respective project mailing lists ...

Hmm, ja.  Das bezieht sich eher auf avr-libc, da gibt's noch eine
Entwickler-Mailingliste.  AVR-GCC ist in diesem Sinne einfach nur
GCC.

>> Hast du die Testsuite mal laufen lassen um zu zeigen,
>> dass der Patch keine negativen Auswirkungen darauf hat?
>
> Tests ...hüstel... gibt's da was für AVR?

Es gibt nur eine allgemeine, da es keinen genügend gut benutzbaren
Simulator für den AVR gibt, den die GCC-Entwickler nehmen könnten.

Hmm, hast Recht, damit kann man das natürlich so ziemlich vergessen.

> Und vermisse sowas wie avr/ dort. Gibt's irgendwo ne gute Beschreibung
> zum Aufsetzen der Testsuite, wo man nicht auto-xxx und so studiert haben
> muss?

Ist zu lange her, dass ich das das letzte Mal gemacht habe.  Ich
erinnere mich dunkel, dass besonders der Start des Tests irgendein
ziemlich ominöses Kommando war...

> Aber vorher wären erstmal die binutils und multilibs dran. Was für ne
> avr-binutils-Version tut's denn zusammen mit gcc-4.3.2?

2.18 genügt auf jeden Fall, möglicherweise sogar 2.17.

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#
# Irgendwie klappt das net. Ich bekomme
#
 /local/gcc-4.3.2-obj-avr/./gcc/as -mmcu=avr3 -o _mulsi3.o libgcc.s
../../../../gcc.gnu.org/gcc_4_3_2_release/libgcc/../gcc/config/avr/libgcc.S: Assembler messages:
../../../../gcc.gnu.org/gcc_4_3_2_release/libgcc/../gcc/config/avr/libgcc.S:281: Error: illegal opcode movw for mcu avr3
../../../../gcc.gnu.org/gcc_4_3_2_release/libgcc/../gcc/config/avr/libgcc.S:283: Error: illegal opcode movw for mcu avr3
georg@titan:/local/gcc-4.3.2-obj-avr/avr/avr35/libgcc> /local/gcc-4.3.2-obj-avr/./gcc/as -v
#
#
# Weil gcc die binutils 2.16.1 verwendet. So wie ich die spärliche
# gcc configure-Hilfe verstehe müsste er doch mit
# --with-build-time-tools die dort gewählten binutils verwenden?
#
#
--with-build-time-tools=PATH
                          use given path to find target tools during the build
#
#
Reading specs from /local/gcc-4.3.2-obj-avr/./gcc/specs
Target: avr
Configured with: ../gcc.gnu.org/gcc_4_3_2_release/configure --target=avr --disable-nls --enable-languages=c --with-build-time-tools=/local/install/avr-binutils-2.19/bin --prefix=/local/install/avr-gcc-4.3.2 --exec-prefix=/local/install/avr-gcc-4.3.2
Thread model: single
gcc version 4.3.2 (GCC)
#
# Nachdem ich per Softlink ./gcc/as richtiggebogen habe,
# gibt's folgenden Ärger:
#
Checking multilib configuration for libssp...
make[2]: Entering directory `/local/gcc-4.3.2-obj-avr/avr/libssp'
bla bla bla
make[3]: Entering directory `/local/gcc-4.3.2-obj-avr/avr/libssp'
libtool: compile:  /local/gcc-4.3.2-obj-avr/./gcc/xgcc -B/local/gcc-4.3.2-obj-avr/./gcc/ -B/local/install/avr-gcc-4.3.2/avr/bin/ -B/local/install/avr-gcc-4.3.2/avr/lib/ -isystem /local/install/avr-gcc-4.3.2/avr/include -isystem /local/install/avr-gcc-4.3.2/avr/sys-include -DHAVE_CONFIG_H -I. -I../../../gcc.gnu.org/gcc_4_3_2_release/libssp -I. -Wall -O2 -g -g -O2 -MT ssp.lo -MD -MP -MF .deps/ssp.Tpo -c ../../../gcc.gnu.org/gcc_4_3_2_release/libssp/ssp.c -o ssp.o
../../../gcc.gnu.org/gcc_4_3_2_release/libssp/ssp.c: In function '__guard_setup':
../../../gcc.gnu.org/gcc_4_3_2_release/libssp/ssp.c:70: warning: implicit declaration of function 'open'
../../../gcc.gnu.org/gcc_4_3_2_release/libssp/ssp.c:70: error: 'O_RDONLY' undeclared (first use in this function)
../../../gcc.gnu.org/gcc_4_3_2_release/libssp/ssp.c:70: error: (Each undeclared identifier is reported only once
../../../gcc.gnu.org/gcc_4_3_2_release/libssp/ssp.c:70: error: for each 
#
# Hast du ne Idee wie man
# a) gcc beigringt, die richtigen binutils zu verwenden im
#    multilib build
# b) was der Fehler mit der libssp ist?
#
# Ist das ein Problem mit gpm/mpfr?
#

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
a) geht über
> --with-build-time-tools=/local/install/avr-binutils-2.19/avr/bin

aber zu b) libssp hab ich keine Idee...

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Johann L. wrote:

> aber zu b) libssp hab ich keine Idee...

--disable-libssp

libssp macht Datei-EA über fopen() und Konsorten, das setzt ein
irgendwie geartetes Betriebssystem voraus.  Sowas hat der AVR nicht.

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jörg Wunsch wrote:

> --disable-libssp

jepp. das war's

Danke :-))

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.