Forum: Compiler & IDEs gcc11 könnte das avr Backend verlieren


von Lars R. (larsr)


Lesenswert?

Johannes F. schrieb:
> Johann L. schrieb:

Die Sachlage scheint mir ziemlich eindeutig zu sein: Es geht hier nicht 
um eine "Community" sondern um die Interessen von ARM bzw. deren 
Plattform, wenn du mal im GCC-Bugtracker nachschaust, steht da bei der 
Mehrheit der Bugs "arm-none-eabi" drin...

Für die klassische x86-Plattform dürfte GCC kaum Relevanz haben (außer 
bei Linux), wobei das ja in der deutlichen Minderheit ist, da bei 
Windows VC++ und bei Apple mittlerweile Clang eingesetzt wird.

Alle "kleinen Plattformen" zusammen können doch nicht ansatzweise die 
Bedeutung erlangen, die ARM für GCC hat. Wobei Keil beim MDK (Keil ist 
seit einiger Zeit eine Tochterfirma von ARM) von GCC auf Clang 
gewechselt ist.

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

Lars R. schrieb:
> Für die klassische x86-Plattform dürfte GCC kaum Relevanz haben (außer
> bei Linux), wobei das ja in der deutlichen Minderheit ist, da bei
> Windows VC++ und bei Apple mittlerweile Clang eingesetzt wird.

Linux dürfte wohl auf der Mehrheit aller Server eingesetzt werden. Da 
von kaum Relevanz bei x86 zu sprechen halte ich für gewagt. Aber sicher 
geht da bisschen was verloren was hauptsächlich an clang listen dürfte.

Aber auch beim GCC geht's aus meiner Sicht ordentlich voran. Das AVR 
Backend stört da wohl und behindert den Fortschritt. Wenn es keiner 
pflegt fliegt es halt nach längerer Ankündigung raus. Normaler 
Fortschritt. Röhrenradios sind ja auch so gut wie ausgestorben.

Matthias

von Oliver S. (oliverso)


Lesenswert?

Lars R. schrieb:
> Die Sachlage scheint mir ziemlich eindeutig zu sein: Es geht hier nicht
> um eine "Community" sondern um die Interessen von ARM bzw. deren
> Plattform, wenn du mal im GCC-Bugtracker nachschaust, steht da bei der
> Mehrheit der Bugs "arm-none-eabi" drin...

Die Sache ist absolut eindeutig, und das wurde inzwischen doch auch 
eindeutig geklärt:

Innerhalb von gcc gibt es niemanden, der die Verantwortung für alle 
Plattformen hat. Die einzelnen Plattformen werden von aktiv 
teilnehmenden Entwicklern gepflegt und weiterentwickelt. Da gibt es dann 
auch mal "Pflichtarbeiten", wenn sich am gcc selber was geändert hat.

Beim avr-gcc ist nach dem "Auscheiden" von Johann die aktuelle Anzahl 
der aktiv teilnehmenden Entwickler exakt Null. In Worten: 0.

Microchip will oder kann nicht, und auch sonst niemand.

Entweder findet sich bis zum Stichtag jemand, der das machen will und 
kann, oder AVR ist draussen. Ende der Diskussion.

Oliver

: Bearbeitet durch User
von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Oliver S. schrieb:
> Innerhalb von gcc gibt es niemanden, der die Verantwortung für alle
> Plattformen hat. Die einzelnen Plattformen werden von aktiv
> teilnehmenden Entwicklern gepflegt und weiterentwickelt. Da gibt es dann
> auch mal "Pflichtarbeiten", wenn sich am gcc selber was geändert hat.

Scheint hier niemand zu raffen worum es geht.

Es geht nicht darum, dass die Backends nicht mehr maintained würden, es 
gibt z.B. Bug-Fixes für die Backends etc, und wenn ein Backend so buggy 
ist und das es nicht den Qualitätsstandards genügt, fliegt es raus. Und 
das ist schon mehr als 1× passiert.

Was momentan abgeht ist was kompeltt anderes.

von Johannes F. (doppelgrau)


Lesenswert?

Johann L. schrieb:
>> Aber wiederum, ist OpenSource, du kannst einen Fork pflegen,
>
> Na dann mach mal

Warum sollte ich?
Werde dafür nicht bezahlt und habe keinen Bedarf an einen AVR-compiler.
Und halt scheinbar auch so wenig andere (Bedarf an einen aktuellen 
Compiler), dass keiner sich der Arbeit annimmt. (IMHO wäre es politisch 
klug gewesen von MicroChip dann paar Mannmonate springen zu lassen, aber 
das ist ja deren Entscheidung)

Johann L. schrieb:
> Was momentan abgeht ist was kompeltt anderes.

Was den?

Das man hier und da auch größere Umbauten in Softwareprojekten vornehmen 
muss, ist doch total normal und kleines 1&1 der Softwareentwicklung. Und 
das dabei Teile für die sich offensichtlich kein Entwickler mehr 
interessiert auf den Prüfstand gestellt werden auch.
Und ob man das Resultat dann gcc11 oder "ngcc" nennt ist doch total 
egal, und passiert auch dauernd in Firmen (gut, da entscheiden meist 
nicht die Entwickler sondern eher der Vertrieb, aber kommt für einen 
reinen Nutzer am Ende aufs gleiche raus). Funktionen oder Produkte 
werden auf einmal angekündigt, oder durch angeblich tollere Sachen 
ersetzt werden, die halt in deinem Use-Case gewisse Probleme haben.

von Roland F. (rhf)


Lesenswert?

Hallo Johann,
> Was momentan abgeht ist was kompeltt anderes.

Wenn ich es richtig verstanden habe, wird das Frontend des gcc im Zuge 
einer Modernisierung so verändert, das alle Backends für die jeweiligen 
Prozessorfamilien neu geschrieben werden müssen.
Bei einem komplett neuen avr-Backend ist davon auszugehen, das es 
einerseits schwieriger zu warten ist und andererseits auf absehbare Zeit 
eine schlechtere Code-Qualität als das aktuelle Backend liefern wird. 
Kurz: das Neuschreibens und Unterhalten des Backends ist sehr aufwendig 
und unter Umständen auch für den Verantwortlichen nicht sehr 
befriedigend.
Es stellt sich also die Frage ob es sich lohnt seine Arbeit zu 
investieren, besonders vor dem Hintergrund, das das Interesse der 
gcc-Verantwortlichen an "alten" Prozessoren eher gering ist und selbst 
kleine, gut begründetet Änderungen/Verbesserungen im aktuellen Backend 
ablehnen (wobei da offensichtlich auch Unkenntnis im Spiel ist, siehe 
Beitrag "Re: newlib fuer AVR?").

Ist das in etwa so richtig?

rhf

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Johannes F. schrieb:
> Das man hier und da auch größere Umbauten

Umbauen ist was anderes als Wegschmeissen.

: Bearbeitet durch User
von Lars R. (larsr)


Lesenswert?

Johann L. schrieb:
> Umbauen ist was anderes als Wegschmeissen.

Sehe ich halt genau so.

Kurios finde ich an diesem Beitrag nur, dass immer gefordert wird, dass 
sich jemand beteiligen möge und wenn derjenige, der genau dies jahrelang 
getan hat, praktisch dieselbe Kritik äußert, wird der von denen genau so 
belächelt wie ich.

Diese Geisteshaltung kann ich wirklich nicht nachvollziehen...

von Johannes F. (doppelgrau)


Lesenswert?

Johann L. schrieb:
> Johannes F. schrieb:
>> Das man hier und da auch größere Umbauten
>
> Umbauen ist was anderes als Wegschmeissen.

Aber manchmal bedingt das eine das andere, weil die Erweiterungen dann 
dazu nicht mehr passen, weil sich die interne Logik ändert.
Wechselt das CMS von PHP5 nach PHP7 kannst alle PlugIns wegwerfen, die 
die alte DB-API nutzen. Und das ist ja eine minimale Wartungs-Änderung. 
Richtig lustig würde es ja, wenn man gleich auf verteilte Datenbanken 
wechseln um richtig schön Wolkig zu sein (skaliert so schön), dann 
bricht gleich alles was ACID voraussetzt / annimmt und nicht mit den 
Implikationen des CAP-Theorems klarkommt.

Oder schau dir die Webbrowser an, wo kannst du noch NAPI-Plugins nutzen?
Konnte alles weggeworfen werden, weil es zum internen Umbau nicht 
passte.

: Bearbeitet durch User
von Lars R. (larsr)


Lesenswert?

Das mag ja alles sein, aber Netscape war damals auch eine richtige 
Firma.

Ein Open-Source-Projekt hat sich gefälligst so zu verhalten, dass die 
Mitarbeit der Freiwilligen geschätzt wird, sonst braucht man sich über 
mangelnde Mitarbeit nicht zu wundern.

Für mich ist das Verhalten von dem Haufen indiskutabel, da kann man 
Argumente bringen wie man will. Die können sich nicht aufführen wie ein 
Pascha und erwarten, dass andere diese Meinung teilen.

von Johannes F. (doppelgrau)


Lesenswert?

NAPI Plugins gabs auch beim Firefox und Chrome, beide (größtenteils - 
Chrome gibts als Chromium ohne die kleinen google-Anteile) OpenSource...

Und die Erweiterung sind oftmals auch OpenSource. Ich kann nicht 
erkennen, das es den Projekten geschadet hat. Browser sind stabiler 
geworden (NAPI-Schnittstelle und Plugins waren eine der 
Haupt-Absturzursache) und Entwickler gibt es immer noch...

Außerdem, was die Wertschätzung der Mitarbeit angeht: Zurück auf die 
Frage oben, warum die Zeit der "alten" Entwickler mehr Wert haben soll 
als die neuer Entwickler die aktuell Lust haben aktiv was zu machen?

: Bearbeitet durch User
von Oliver S. (oliverso)


Lesenswert?

Lars R. schrieb:
> Ein Open-Source-Projekt hat sich gefälligst so zu verhalten, dass die
> Mitarbeit der Freiwilligen geschätzt wird, sonst braucht man sich über
> mangelnde Mitarbeit nicht zu wundern.

Open Source hat nichts mit Freiwilligen zu tun. Die Zeiten sind bei den 
großen Projekten schon lange vorbei. Daher gehts da auch vorwärts.

Oliver

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Roland F. schrieb:
> Wenn ich es richtig verstanden habe, wird das Frontend des gcc im Zuge
> einer Modernisierung so verändert, das alle Backends für die jeweiligen
> Prozessorfamilien neu geschrieben werden müssen.

Technisch ist es ein Teil des Middleends, also weder Frontend (das 
bezeichnet sprachabhängige Teile für C, C++, LTO, Ada, Fortran, ...) 
noch Backend.

Es wird auch nicht wirklich was verändert, es wird einfach eine von 2 
Alternativen (cc0, CCmode) rausgekickt.  Das sind wesentlich 
unterschiedliche Ansätze um Condition Code zu modellieren. cc0 gibt's 
seit es GCC gibt, CCmode ist neuer.  cc0 hat paar Nachteile, etwa können 
Vergleich und Branch nur als Einheit geschedult werden, d.h. 
Vergleich+Branch folgen immer direkt aufeinander.  Für Architekturen wie 
AVR ist das jedoch kein Nachteil.

Im Compiler werden die Alternativen i.w. unterschieden per
1
#ifdef HAVE_cc0
Was gemacht werden wird, ist effektiv alle diese Stellen zu entfernen.

> Bei einem komplett neuen avr-Backend ist davon auszugehen, das es
> einerseits schwieriger zu warten ist

Etwas schwiertiger.  Das Hauptproblem ist die Umstellung.  cc0 hat den 
Vorteil, das es ziemlich einfach ist; sowohl von der Darstellung / 
Beschreibung als auch vom Ablauf.

> und andererseits auf absehbare Zeit eine schlechtere Code-Qualität
> als das aktuelle Backend liefern wird.

Davon ist auszugehen. Sowohl Korrektheit als auch Performance 
betreffend.

> Kurz: das Neuschreibens und Unterhalten des Backends ist sehr
> aufwendig und unter Umständen auch für den Verantwortlichen nicht
> sehr befriedigend.

Ja.  Man kann ja nicht teilweise umstellen.

Und irgendwann wird dann noch auf einen neuen Register-Allokator 
umgestellt, von RA.2 auf RA.3.

Umstellung RA.1 -> RA.2 war vor X Jahren und problemlos, im Backend hat 
man davon nix gemerkt — was ja auch so sein soll.  Welcher Reg-Allokator 
verwendet wird ist ja unabhängig von den verwendeten Interfaces.

Mit RA.2 -> RA.3 ist das aber nicht mehr so.  RA.3 kann zum Beispiel 
nicht mit cc0 umgehen, und auch nicht mit CCmode falls Spill-Code den 
Prozessorstatus verändern kann.  Was bei AVR durchaus der Fall ist. 
Größere Architekturen haben damit kein Poblem, die haben Instruktionen 
wie ADD üblicherweise 2-fach: Eine Version mit Carry Setzen und eine 
ohne Condition-Code zu verändern.

Weil irgendwann auf RA.3 umgestellt werden soll, fliegt auch cc0 raus, 
denn RA.3 kann damit eh nicht umgehen.  Und die Umsetzung von cc0 per 
#ifdef ist nicht mehr ganz zeitgemäß, ginge aber auch anders.  So viel 
Stellen im Compiler sind das nämlich nicht.  Dafür kennt RA.3 einige 
Hooks nicht mehr, was für AVR mit seinen wenigen Adressregistern 
bedeutet, dass X-Reg noch schlechter unterstützt wird (oder gar nicht 
mehr).  Oder weil RA.3 mit den wenigen Adress-Registern nicht 
zurechtkommt, gibt es alle Nase lang Spill-Fails Internal Compiler 
Errors.

tl;dr: Selbst falls die beiden Umstellungen irgendwann für AVR gemacht 
werden, d.h. falls AVR nicht rausfliegt, wird der Code absehbar und 
dauerhaft schlechter.

: Bearbeitet durch User
von Veit D. (devil-elec)


Lesenswert?

Johann L. schrieb:
>
> tl;dr: Selbst falls die beiden Umstellungen irgendwann für AVR gemacht
> werden, d.h. falls AVR nicht rausfliegt, wird der Code absehbar und
> dauerhaft schlechter.

'grübel' Ich dachte die ganze Zeit das durch die Umstellung der Code 
wieder besser wird. Auch das dann die Codegrößen wieder schrumpfen, die 
bis jetzt von Version zu Version angestiegen sind, eben weil das backend 
nicht ganz optimal passt.

Also wenn das so stimmt wie gesagt, wenn!, dass die Codequalität danach 
trotzdem schlecht bleibt und weiterhin schlechter wird, dann brauch ich 
mich nicht ins Zeug legen für avr-gcc. Dann hole ich mir auch meine 
Spende zurück. Dann hätte ja alles gar keinen Sinn. Das wäre wiederum 
sehr traurig um den gcc für avr.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Veit D. schrieb:
> Johann L. schrieb:
>>
>> tl;dr: Selbst falls die beiden Umstellungen irgendwann für AVR gemacht
>> werden, d.h. falls AVR nicht rausfliegt, wird der Code absehbar und
>> dauerhaft schlechter.
>
> 'grübel' Ich dachte die ganze Zeit das durch die Umstellung der Code
> wieder besser wird.

CCmode ist einfach ein neuerer Besen, der für Boliden besser kehrt.  Der 
Code wird dadurch "besser" weil das Middle-End einfacher wartbar wird, 
denn eine Art, den Condition Code zu modellieren (cc0), fliegt einfach 
ersatzlos raus.

Für AVR und vermutlich einige / alle anderen Back-Ends die noch cc0 
verwenden — oder noch bis neulich cc0 verwendeten — bringt CCmode 
absehbar nix. Außer haufen Arbeit und Instabilität für / durch die 
Umstellung.

> Auch das dann die Codegrößen wieder schrumpfen, die bis jetzt von
> Version zu Version angestiegen sind, eben weil das backend
> nicht ganz optimal passt.

Das sind keine Probleme des Back-Ends.  Wenn das so wäre, wäre das im 
AVR Back-End längst behoben.  Die Probleme liegen im Middle-End.

> Also wenn das so stimmt wie gesagt, wenn!, dass die Codequalität danach
> trotzdem schlecht bleibt und weiterhin schlechter wird, dann brauch ich
> mich nicht ins Zeug legen für avr-gcc. Dann hole ich mir auch meine
> Spende zurück. Dann hätte ja alles gar keinen Sinn. Das wäre wiederum
> sehr traurig um den gcc für avr.

Prinzipiell ist nicht ausgeschlossen, dass sich das Middle-End in dieser 
Beziehung wieder bessert. Momentan gibt es eben niemand, der die 
entsprechenden Maintainer nervt.  Wobei nur nerven natürlich nix bringt; 
man braucht schon Testfälle.  Am besten solche, die auch für ARM, 
PowerPc oder x86 funktionieren, dann gehen die Dinge plötzlich ganz 
fix...

von Wilhelm M. (wimalopaan)


Lesenswert?

Die Situation entspannt sich dahin gehend, als dass das AVR-Beckend im 
LLVM nicht nicht mehr experimentell ist (und ganz gut funktioniert).

von Oliver S. (oliverso)


Lesenswert?

Ganz blöd gefragt: wie kommt man an einen avr-clang?

Oliver

von Wilhelm M. (wimalopaan)


Lesenswert?

Oliver S. schrieb:
> Ganz blöd gefragt: wie kommt man an einen avr-clang?

git clone
cmake ...
make -j 8

von Veit D. (devil-elec)


Lesenswert?

Hallo,

nur mal zur Zwischeninfo. Arduino.cc antwortet nicht einmal auf Github. 
Ist nun 14 Tage her. Ich wüßte auch nicht wie ich die sonst kontaktieren 
sollte.

von Veit D. (devil-elec)


Lesenswert?


von Lars R. (larsr)


Lesenswert?

Veit D. schrieb:
> 'grübel' Ich dachte die ganze Zeit das durch die Umstellung der Code
> wieder besser wird. Auch das dann die Codegrößen wieder schrumpfen, die
> bis jetzt von Version zu Version angestiegen sind, eben weil das backend
> nicht ganz optimal passt.

Man muss in diesem Beitrag schon wirklich bewusst manche Stellen 
"überlesen" wollen, um weiterhin bei der Meinung zu bleiben, dass die 
Ursache dieser Probleme im AVR-Backend liegen würde.

Wie gesagt: Am GCC wird vorrangig das gemacht, was die ARM-Plattform 
weiterbringt. Hier ist offenbar Kapazität bei den Entwicklern ohne Ende 
vorhanden (vermutlich weil Geld fließt). Die Änderungen, die dann 
gemacht werden, werden aber einfach "durchgewunken", egal, ob andere 
Plattformen dadurch Nachteile erledigen oder nicht.

Und spinnen wir das mal weiter: Wenn diejenigen, die behaupten, dass 
Microchip (oder wer auch immer) für die AVR-Unterstützung im GCC etwas 
zahlen müsse, wieso sollten die ein Interesse daran haben, am Middleend 
(oder wo auch immer) etwas zu verändern und sich nachher der Gefahr 
auszusetzen, sich was anhören zu müssen, wenn ARM darunter leiden würde?

Ich bin mir ziemlich sicher: Würde jemand einen Patch comitten, der bei 
AVR wieder zu einer Verbesserung, um - sagen wir mal - 10%, führt aber 
gleichzeitig bei ARM nur zu 1% Verschlechterung, dann würde das einfach 
reverted.

Wenn ihr das alle billig und angemessen findet - okay. Hier wird einfach 
mit unterschiedlichem Maß gemessen. Man sieht das doch schon im 
Bugtracker, bei ARM kann man Bugs in mehreren Stufen priorisieren, bei 
den "unbeliebten" Plattformen nur in einer Stufe - egal wie gravierend 
der Bug ist!

Das sind doch nachprüfbare Fakten - man schaue einfach in die 
Beschreibung zum Bugmeldeverfahren bei GCC.

So viel ich weiß, ist AVR die einzige 8-Bit-Plattform bei GCC (im 
offiziellen Code), andere der Plattformen, die die rauswerfen wollen, 
sind 16 Bit. Wie bereits geschildert, geht es hier nicht um technische 
Einschränkungen, sondern einzig um bewusste (politische) Entscheidungen.

von Wilhelm M. (wimalopaan)


Lesenswert?


von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Lars R. schrieb:
> Am GCC wird vorrangig das gemacht, was die ARM-Plattform weiterbringt.

Ich glaube, das ist ein wenig zu kurz gegriffen.

Natürlich spielt ARM eine wesentliche Rolle (und zwar weniger, weil da 
irgendjemand „GCC“ dafür bezahlen würde, sondern schlicht, weil ARM 
selbst Entwickler dafür bezahlt, bei GCC mitzuarbeiten), aber amd64 aka 
x86_64 wird ihnen gewiss mindestens genauso wichtig sein.

Aber sieh das mal andersrum: ARM bezahlt Leute dafür, dort was 
mitzumachen – obwohl sie mittlerweile mit Keil einen eigenen Compiler 
haben. Das hat eben Atmel und dann Microchip nie ernsthaft gemacht. Die 
haben stattdessen auf IAR gesetzt oder irgendwelche eigenen 
Branches/Forks befummelt – und dann zum Teil noch Geld dafür haben 
wollen.

Ursprünglich war der GCC übrigens für 32-bit-CPUs konzipiert worden, 
16bittige sind dann „irgendwie“ mit reingekommen, aber 8bitter waren nie 
wirklich Zielsystem. Daher ist der AVR (wenn ich Johann richtig 
verstanden habe) auch eher als so eine Art „Pseudo-16bit-CPU“ damals 
implementiert worden – was im Gegenzug einige andere Optimierungen 
verhindert hat, wenn bspw. bei einer 16-bit-Rechnung die oberen 8 Bits 
gar keine Rolle spielten.

von Veit D. (devil-elec)


Lesenswert?

Wilhelm M. schrieb:
> Veit D. schrieb:
>> ein User hat einen Link gepostet.
>> https://llvm.org/docs/ReleaseNotes.html#changes-to-the-avr-target
>
> Beitrag "Re: gcc11 könnte das avr Backend verlieren"

Die Frage ist, kann ein llvm einen gcc für AVR gleichwertig ersetzen?

von Veit D. (devil-elec)


Lesenswert?

Hallo,

Wenn ARM sich aktiv um gcc kümmert muss man sich nicht wundern. Auch AMD 
und Intel tragen zu gcc bei. Obwohl das Intel nicht müßte, da die ihren 
eigenen Compiler hegen und pflegen.

Jörg W. schrieb:
> Aber sieh das mal andersrum: ARM bezahlt Leute dafür, dort was
> mitzumachen – obwohl sie mittlerweile mit Keil einen eigenen Compiler
> haben. Das hat eben Atmel und dann Microchip nie ernsthaft gemacht. Die
> haben stattdessen auf IAR gesetzt oder irgendwelche eigenen
> Branches/Forks befummelt – und dann zum Teil noch Geld dafür haben
> wollen.

Genau, kommt aufs gleiche raus nur umgedreht. Kümmerte sich früher Atmel 
nicht darum und heute Microchip weiterhin nicht, dann landet alles 
irgendwann auf dem Abstellgleis. Damit liegt alle Last auf den Schultern 
der Community, also die die das können.

Übrigens werkelt Arduino.cc an einer "Arduino Pro IDE". Momentan noch 
alles Betastatus. Aber die nutzen bei der Pro IDE den clang Compiler. 
Also auch keinen gcc mehr.

Wenn das mit dem avr-backend nichts wird, sieht es echt traurig aus.
Aber noch ist nicht aller Tage Abend. Noch habe ich Hoffnung für avr im 
gcc. Bei Motorola klappte es schließlich auch. Ich hatte mir das mal 
spassenshalber angeschaut, weil ich hier auch so viel gefragt und 
geschrieben habe, aber da blicke ich echt nicht durch. Dafür langen 
meine Programmierkenntnisse einfach nicht. Selbst mit "logischer 
Textersetzung" käme man nicht weit, wenn es nur Fleißarbeit wäre.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Veit D. schrieb:
> Übrigens werkelt Arduino.cc an einer "Arduino Pro IDE".

Arduino hat immer nur poliert (sprich, IDE gebastelt), nie an der 
Substanz gearbeitet. Weder am Compiler noch an der Basis-Bibliothek 
(libc) noch an AVRDUDE. Nur ihre Abstraktionsbibliothek ist ein 
nennenswerter Beitrag jenseits der IDE selbst.

Wenn ihnen plötzlich beide Compiler wegbrechen würden, würden sie 
schlicht und ergreifend ziemlich alt aussehen. Allerdings wäre es aus 
ihrer Sicht vermutlich einfacher, einen Fork des älteren GCC-Codes 
weiter zu pflegen, statt sich um die Anpassungen im Middleend von GCC 11 
zu kümmern.

von Michael F. (Gast)


Lesenswert?

Jörg W. schrieb:
> Aber sieh das mal andersrum: ARM bezahlt Leute dafür, dort was
> mitzumachen – obwohl sie mittlerweile mit Keil einen eigenen Compiler
> haben.

Sicher?

Ich dachte, selbst in Keil MDK wird seit längerem der Arm Compiler 
genutzt und damit wäre es (mehr oder weniger) nur noch eine alternative 
IDE zu Arm DS5 (mit künstlich beschnittenem Device-Support).

Eine Frage bezüglich LLVM: In wie weit wären Projekte für GCC mit LLVM 
kompatibel oder fängt man da wieder ganz von vorne an?

von S. R. (svenska)


Lesenswert?

Lars R. schrieb:
> Am GCC wird vorrangig das gemacht, was die ARM-Plattform weiterbringt.

ARMv7, ARMv8, x86_64 und eventuell noch x86. Das sind nunmal die großen 
Architekturen, da gibt es vom Hersteller bezahlte Entwickler, und da 
sind moderne Programmiersprachen relevant.

AVR ist einige Größenordnungen kleiner, es gibt keine 
C++-Standardbibliothek, der Hersteller kümmert sich nicht und aktive 
Entwickler gibt's auch kaum. Der meiste AVR-Code in der Welt ist 
Assembler oder C, da kommt es auf aktuelle Compilerversionen nicht an.

Hier im Forum will einzig Wilhelm sein C++27 sehen.

Lars R. schrieb:
> Wenn ihr das alle billig und angemessen findet - okay.

Es ist anhand der Faktenlage logisch und nachvollziehbar. Und wenn man 
AVR entfernen muss, um die vier Großen voranzubringen, dann hat man in 
Summe die Welt trotzdem vorangebracht.

Lars R. schrieb:
> Wie bereits geschildert, geht es hier nicht um technische
> Einschränkungen, sondern einzig um bewusste (politische)
> Entscheidungen.

Ist es immer politisch, ein totes Pferd nicht mehr zu reiten?

von J. W. (dilbert)


Lesenswert?

> Eine Frage bezüglich LLVM: In wie weit wären Projekte für GCC mit LLVM
> kompatibel oder fängt man da wieder ganz von vorne an?

Zu AVR im Clang kann ich nichts sagen, aber beim MSP430 musste man, wenn 
ich mich nicht täusche, die Unterbrechungsroutinen anders markieren.

Was bei GCC z.B.
1
    __attribute__ ((interrupt(PORT1_VECTOR)))
2
    void port1(void) { ... }
ist, wäre bei Clang
1
    #pragma vector=PORT1_VECTOR
2
    __interrupt void port1(void) { ... }
oder so ähnlich...

von Wilhelm M. (wimalopaan)


Lesenswert?

J. W. schrieb:
> oder so ähnlich...

Die ISR für clang/clang++ müssen (unmangled) so heißen, wie im 
startup-code definiert. Also etwa folgendermaßen.

__attribute__((interrupt)) void __vector_21(void)  {}

Kann man natürlich beliebig mit CPP-Gewurstel "schöner" machen.

von J. W. (dilbert)


Lesenswert?

Danke für den Hinweis. Es ist schon länger hin, dass ich mich damit 
beschäftigt hatte.

von Wilhelm M. (wimalopaan)


Lesenswert?

Noch jemand, der sich über GCC ärgert:

http://lists.llvm.org/pipermail/llvm-dev/2020-April/140546.html

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Lars R. schrieb:
> Am GCC wird vorrangig das gemacht, was die ARM-Plattform weiterbringt.

AM GCC wird vorrangig das gemacht, was die an GCC arbeitenden Entwickler 
machen.  Und die stellt google, arm, redhead, ibm, codesourcery, suse, 
st, ...

> Hier ist offenbar Kapazität bei den Entwicklern ohne Ende
> vorhanden (vermutlich weil Geld fließt).

Es fließt kein Geld zum GCC, sondern Firmen lassen daran arbeiten (oder 
auch nicht).

> Die Änderungen, die dann gemacht werden, werden aber einfach
> "durchgewunken", egal, ob andere Plattformen dadurch Nachteile
> erledigen oder nicht.

> Und spinnen wir das mal weiter: Wenn diejenigen, die behaupten, dass
> Microchip (oder wer auch immer) für die AVR-Unterstützung im GCC etwas
> zahlen müsse,

Wie gesagt: Da wird nix gezahlt.

> Ich bin mir ziemlich sicher: Würde jemand einen Patch comitten, der bei
> AVR wieder zu einer Verbesserung, um - sagen wir mal - 10%, führt aber
> gleichzeitig bei ARM nur zu 1% Verschlechterung, dann würde das einfach
> reverted.

Um einen Patch zu committen muss er erst mal durch ein Review.  GCC ist 
keine Code-Bonanza wo jeder einfach seinen Code reinhaut.


> okay. Hier wird einfach mit unterschiedlichem Maß gemessen.
> Man sieht das doch schon im Bugtracker, bei ARM kann man Bugs
> in mehreren Stufen priorisieren, bei den "unbeliebten" Plattformen
> nur in einer Stufe - egal wie gravierend der Bug ist!

Wie Maße sind:

1) Primary Targets: Wichtige Host-Systeme wie x86_64, ARM, PowerPC. 
Offenbar gehört AVR nicht dazu.  In absehbarer Zeit wird GCC nicht auf 
einem AVR laufen.

2) Secondary Targets: Targets, für die besondere Qualitätsansprüche bei 
Releases gelten.

3) Der ganze Rest, z.B. avr.

Damit ein Target "secondary" ist, müssen bestimmte Voraussetzungen 
gelten:

i) Das Target ist standardkonform.  Trifft für avr nicht zu, denn double 
ist ein 32-Bit Typ.

ii) libsupc++ wird unterstützt, das ist der minimale Kern der C++ 
Standard-Bibliothek und Basis der libstdc++-v3 mit z.B. 
bits/c++config.h, bits/os_defines.h, bits/cpu_defines, bits/locale.h 
etc. Wird von avr nicht unterstützt.  Stattdessen frickelt jeder, der 
avr-g++ einsetzt, seine eigenen Header zusammen.

iii) Das Target wird so gut unterstützt, dass qualitativ hochwertige GCC 
Releases möglich sind. Konkret: Gibt es mit einem Target Probleme, die 
von den Backend-Maintainern / -Entwicklern nicht zeitnah gelöst werden, 
dann wird NICHT die GCC Release bis zum St Nimmerleinstag aufgeschoben, 
sondern es gibt eine Release und das Target wird auf 3-klassig 
runtergestuft.


Der einzige Punkt, wo in den letzten 10 Jahren überhaupt Bewegung 
erkennbar war, ist Punkt i:  Ab v10 wird 64-Bit double unterstützt – 
zumindest im Compiler und der libgcc.  Wann / ob die (avr-)libc 64-Bit 
double unterstützt weiß ich nicht.


Und es gab durchaus Maintainer, die AVR gerne als Secondary Target 
gesehen hätten genau weil die Architektur sich in einigen wesentlichen 
Punkten von den anderen Targets unterscheidet.

Aber von nix kommt eben nix:

* Von Atmel kommt nix.

* Von Microchip kommt nix.

* Von der "AVR-Community" – was immer das sein soll – kommt nix.


> Das sind doch nachprüfbare Fakten - man schaue einfach in die
> Beschreibung zum Bugmeldeverfahren bei GCC.

Ja, i), ii) und iii) sind definitiv nachprüfbar.


> Wie bereits geschildert, geht es hier nicht um technische
> Einschränkungen, sondern einzig um bewusste (politische) Entscheidungen.

Ja, cc0 / CCmode ist ein Novum. Gebaren dieser Art gab es bislang nicht 
im GCC.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Johann L. schrieb:
> libsupc++ wird unterstützt, das ist der minimale Kern der C++
> Standard-Bibliothek und Basis der libstdc++-v3 mit z.B.
> bits/c++config.h, bits/os_defines.h, bits/cpu_defines, bits/locale.h
> etc. Wird von avr nicht unterstützt.

Weiß gar nicht mehr genau, was das alles war. Teilweise vermutlich ein 
nicht komplett implementiertes stdio, weiß nicht, ob die 
double-Geschichte da auch mit reinspielte (auf jeden Fall tat sie's bei 
FORTRAN).

Möglicherweise hätte man für standardkonformes stdio die avr-libc 
aufbohren können oder zusehen, dass die newlib unterstützbar 
wird/bleibt, aber wie du schon schriebst, so wirklich viel kam da auch 
nie aus der Community rüber. Gerade Arduino setzt massiv auf C++ und 
hätte da ja vielleicht am ehesten Motivation haben können für "tier 2" 
Support - schließlich machen sie Geld damit. Aber gerade Arduino war nun 
auch nie sonderlich integrativ, die haben gern genutzt, was da war, aber 
ansonsten ihr eigenes Süppchen vor sich hin geköchelt.

von Frank K. (fchk)


Lesenswert?

Veit D. schrieb:

> Also wenn das so stimmt wie gesagt, wenn!, dass die Codequalität danach
> trotzdem schlecht bleibt und weiterhin schlechter wird, dann brauch ich
> mich nicht ins Zeug legen für avr-gcc. Dann hole ich mir auch meine
> Spende zurück. Dann hätte ja alles gar keinen Sinn. Das wäre wiederum
> sehr traurig um den gcc für avr.

Welche Motivation hast Du eigentlich, Dich so an AVR zu klammern?

AVR ist
- nicht besonders schnell, auch nicht im Vergleich zu anderen 8 Bit 
Architekturen
- nicht besonders billig, vor allem wenn man die gebotene Leistung 
betrachtet, bei Digikey kostet ein Mega2560 genauso viel wie ein 
PIC32MZ1024EFH100-I/PF, nur letzterer ist ein 32 Bit MIPS mit 200 MHz 
und 512k RAM
- nicht besonders stromsparend mit der 5V Halbleitertechnik, da sind 
Architekturen wie EFM8/EFM32 und MSP430 weiter

Es gibt ja genug Alternativen. Von daher lasst ihn sterben.

fchk

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Die von dir genannten Alternativen sind aber im Vergleich zu AVR 
reichliche Exoten, d.h. du findest weniger Codebeispiele rundrum und 
weniger Community. Das halte ich für einen AVR schon für ein 
wesentliches Argument.

Ich würde dann eher als Alternative auf 5-V-fähige ARMs ausweichen, 
bspw. SAMC21.

(Wenn die direkte 5-V-Fähigkeit kein Thema ist, wird die Auswahl ja 
sowieso nochmal massiv größer.)

Aber es ging in diesem Thread natürlich nicht um Alternativen zu AVRs, 
sondern um GCC und deren Gebaren.

von Oliver S. (oliverso)


Lesenswert?

Jörg W. schrieb:
> Aber es ging in diesem Thread natürlich nicht um Alternativen zu AVRs,
> sondern um GCC und deren Gebaren.

Was indirekt dann doch auch mit Alternativen zu tun hat. Wenn AVR im gcc 
ausstirbt (und clang nicht so schnell als vollwertiger Ersatz dienen 
kann), ist das auch für Hobbiisten ein weiterer Grund, auf ARM 
unzusteigen.

Oliver

: Bearbeitet durch User
von Wilhelm M. (wimalopaan)


Lesenswert?

Jörg W. schrieb:
> Die von dir genannten Alternativen sind aber im Vergleich zu AVR
> reichliche Exoten

Ich sehe da auch eher die mega0-serie bzw. tiny1 als Motivation.

von Wilhelm M. (wimalopaan)


Lesenswert?

Oliver S. schrieb:
> Was indirekt dann doch auch mit Alternativen zu tun hat. Wenn AVR im gcc
> ausstirbt (und clang nicht so schnell als vollwertiger Ersatz dienen
> kann), ist das auch für Hobbiisten ein weiterer Grund, auf ARM
> unzusteigen.

Das AVR backend im LLVM  hat den experimentellen Status schon verloren 
und funktioniert ganz passabel. Bis gcc11 da ist ohne AVR hat LLVM-11 
oder 12 sicher da weiterhin aufgeholt.

Das lange lamentieren hier hilft eigentlich nur dem LLVM weiter auf die 
Sprünge zu helfen. Lasst es einfach aussterben: alles hat seine Zeit.

von Veit D. (devil-elec)


Lesenswert?

Frank K. schrieb:
> Welche Motivation hast Du eigentlich, Dich so an AVR zu klammern?

Hallo,

die Antwort ist nicht kompliziert. Weil die 8Bitter übersichtlich zum 
programmieren sind und man sich nicht im Manual verliert. Ansonsten wie 
Wilhelm sagt. Die neue Mega0 und Tiny1 Serie wurden Registermäßig 
aufgeräumt und aufgebohrt. Benötigen in den meisten Fällen nur 1 bis 2 
Takte für einen Befehl. Damit machen die schon wieder Boden gut im 
Vergleich zu vermeintlich schnelleren und der I/O Port ist nicht 
entkoppelt vom Kerntakt.

20MHz oder 200MHz? Was schnell ist muss man erst definieren. Es muss 
ausreichend schnell sein für sein zu lösendes Problem. Für mich reicht 
das was die mit ihren 16/20MHz leisten.

Was ich dazu sagen muss zur besseren Einordnung meiner Aussage(n). Ich 
bin kein Entwickler der davon leben muss. Ich habe mich auf die AVR 8Bit 
Architektur eingeschossen.

von Benedikt M. (bmuessig)


Lesenswert?

Veit D. schrieb:
> der aktuelle Stand vom Spendenkonto steht übrigens schon bei 1110,-
> Dollar. Die Hoffnung wächst. Vor kurzem waren es noch knapp über 300,-.

Ich habe gerade auch was zur Bounty dazugegeben.

von Oliver S. (oliverso)


Lesenswert?

Wilhelm M. schrieb:
> Oliver S. schrieb:
>> Ganz blöd gefragt: wie kommt man an einen avr-clang?
>
> git clone
> cmake ...
> make -j 8

Nachdem sowohl die Windows- als auch die msys2-Version des 10er 
llvm/clang AVR für ein unknown triple halten, und selber compilieren in 
meiner Linux-VM an zu wenig Plattenplatz gescheitert ist (da waren „nur“ 
60GB frei, reicht leider nicht), bleibst da nicht mehr als bei der 
Hoffnung, daß das irgendwann einmal kommt.

Oliver

: Bearbeitet durch User
von Wilhelm M. (wimalopaan)


Lesenswert?

Oliver S. schrieb:
> Wilhelm M. schrieb:
>> Oliver S. schrieb:
>>> Ganz blöd gefragt: wie kommt man an einen avr-clang?
>>
>> git clone
>> cmake ...
>> make -j 8
>
> Nachdem sowohl die Windows- als auch die msys2-Version des 10er
> llvm/clang AVR für ein unknown triple halten, und selber compilieren in
> meiner Linux-VM an zu wenig Plattenplatz gescheitert ist (da waren „nur“
> 60GB frei, reicht leider nicht), bleibst da nicht mehr als bei der
> Hoffnung, daß das irgendwann einmal kommt.

Version 11 wird es beinhalten.

von Wilhelm M. (wimalopaan)


Lesenswert?

Die Targets:
1
llc --version
2
LLVM (http://llvm.org/):
3
LLVM version 11.0.0git
4
DEBUG build with assertions.
5
Default target: x86_64-unknown-linux-gnu
6
Host CPU: skylake
7
8
Registered Targets:
9
aarch64    - AArch64 (little endian)
10
aarch64_32 - AArch64 (little endian ILP32)
11
aarch64_be - AArch64 (big endian)
12
amdgcn     - AMD GCN GPUs
13
arm        - ARM
14
arm64      - ARM64 (little endian)
15
arm64_32   - ARM64 (little endian ILP32)
16
armeb      - ARM (big endian)
17
avr        - Atmel AVR Microcontroller
18
bpf        - BPF (host endian)
19
bpfeb      - BPF (big endian)
20
bpfel      - BPF (little endian)
21
hexagon    - Hexagon
22
lanai      - Lanai
23
mips       - MIPS (32-bit big endian)
24
mips64     - MIPS (64-bit big endian)
25
mips64el   - MIPS (64-bit little endian)
26
mipsel     - MIPS (32-bit little endian)
27
msp430     - MSP430 [experimental]
28
nvptx      - NVIDIA PTX 32-bit
29
nvptx64    - NVIDIA PTX 64-bit
30
ppc32      - PowerPC 32
31
ppc64      - PowerPC 64
32
ppc64le    - PowerPC 64 LE
33
r600       - AMD GPUs HD2XXX-HD6XXX
34
riscv32    - 32-bit RISC-V
35
riscv64    - 64-bit RISC-V
36
sparc      - Sparc
37
sparcel    - Sparc LE
38
sparcv9    - Sparc V9
39
systemz    - SystemZ
40
thumb      - Thumb
41
thumbeb    - Thumb (big endian)
42
wasm32     - WebAssembly 32-bit
43
wasm64     - WebAssembly 64-bit
44
x86        - 32-bit X86: Pentium-Pro and above
45
x86-64     - 64-bit X86: EM64T and AMD64
46
xcore      - XCore

von Malte _. (malte) Benutzerseite


Lesenswert?

Oliver S. schrieb:
> selber compilieren in
> meiner Linux-VM an zu wenig Plattenplatz gescheitert ist (da waren „nur“
> 60GB frei, reicht leider nicht),

Weiß denn jemand wie viel Speicher benötigt wird? 60GB hätte ich in 
meinem /home jetzt auch nicht frei.

von Wilhelm M. (wimalopaan)


Lesenswert?

Malte _. schrieb:
> Oliver S. schrieb:
>> selber compilieren in
>> meiner Linux-VM an zu wenig Plattenplatz gescheitert ist (da waren „nur“
>> 60GB frei, reicht leider nicht),
>
> Weiß denn jemand wie viel Speicher benötigt wird? 60GB hätte ich in
> meinem /home jetzt auch nicht frei.

Bei mir sind es ca 80GB.

von J. W. (dilbert)


Lesenswert?

Und 5-6 GB RAM, wenn ich mich nicht täusche.
Plus ungefähr einen Vormittag Zeit auf einem mobilen i5 der 8. 
Generation.

von Oliver S. (oliverso)


Lesenswert?

J. W. schrieb:
> Und 5-6 GB RAM, wenn ich mich nicht täusche.

8Gb ohne Swappartition reichen nicht.

Oliver

von Wilhelm M. (wimalopaan)


Lesenswert?

Oliver S. schrieb:
> J. W. schrieb:
>> Und 5-6 GB RAM, wenn ich mich nicht täusche.
>
> 8Gb ohne Swappartition reichen nicht.

Mein Kiste hat 64GB Ram und braucht 30-45min.

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Was ist der LLVM denn für eine Bloatware?
(ernsthafte Frage)
Den GCC kann ich auf einer Linux VM mit 30GB HDD und 1GB RAM bauen o_O

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

Mw E. schrieb:
> Was ist der LLVM denn für eine Bloatware?
> (ernsthafte Frage)
> Den GCC kann ich auf einer Linux VM mit 30GB HDD und 1GB RAM bauen o_O

Kann der GCC dann auch Code für alle von Wilhelm genannten Targets 
erzeugen? LLVM ist halt mehr als "nur" ein Compiler. Ich hab's nicht 
getestet aber kann gut sein das da auch so Sachen wie clangd, 
clang-format und clang-tidy dabei sind.

Oft sind die finalen Binaries auch nicht sooooo groß sondern nur die 
Zwischenprodukte. WIMRE braucht man zum übersetzen von Firefox zwingend 
einen Compiler/Linker der im 64 Bitmodus läuft auch wenn das exe nachher 
unter 100MB hat.

Matthias

: Bearbeitet durch User
von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Μαtthias W. schrieb:
> Kann der GCC dann auch Code für alle von Wilhelm genannten Targets
> erzeugen?

Zumindest für den größten Teil (und wahrscheinlich einige Exoten mehr).

Wenn man versucht, ihn für "alle" Target zu compilieren, wird er 
vermutlich noch viel "bloatiger" (da man für jedes host-target-Tupel ein 
eigenes build directory braucht).

Allerdings ist das beim GCC nicht die primäre Philosophie, sondern man 
baut ihn für jeweils eins dieser Tupel.

: Bearbeitet durch Moderator
von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

Jörg W. schrieb:
> Μαtthias W. schrieb:
>> Kann der GCC dann auch Code für alle von Wilhelm genannten Targets
>> erzeugen?
>
> Zumindest für den größten Teil (und wahrscheinlich einige Exoten mehr).
>
> Wenn man versucht, ihn für "alle" Target zu compilieren, wird er
> vermutlich noch viel "bloatiger" (da man für jedes host-target-Tupel ein
> eigenes build directory braucht).
>
> Allerdings ist das beim GCC nicht die primäre Philosophie, sondern man
> baut ihn für jeweils eins dieser Tupel.

Genau auf das wollte ich raus. clang kann das eben schon nach einem 
build auch wenn dann dort noch libc und libc++ für die einzelnen 
Architekturen fehlen dürften?

Matthias

von S. R. (svenska)


Lesenswert?

Mw E. schrieb:
> Was ist der LLVM denn für eine Bloatware?

Ich glaube, sowas fällt unter "moderne Softwareentwicklung".
Android ist auch so ein Monster.

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Also LLVM baut immer für alle Targets?
Durchaus ein interessantes Konzept, aber bisher brauchte ich nur 
x86(_64), MIPS, ARM und AVR ;)

Was will man denn zB mit powerpc und sparc?
Das dürfte doch schon eher ne Nische sein.

von S. R. (svenska)


Lesenswert?

Mw E. schrieb:
> Also LLVM baut immer für alle Targets?

Grundsätzlich ja, aber man kann natürlich auch beschränkte LLVMs bauen. 
Bringt nur wenig.

> Durchaus ein interessantes Konzept, aber bisher brauchte ich nur
> x86(_64), MIPS, ARM und AVR ;)

So geht es den meisten, die LLVM nur als Compiler benutzen, aber er 
lässt sich auch wunderbar als Bibliothek verwenden, z.B. als 
JIT-Compiler für bestimmte Bytecodes...

> Was will man denn zB mit powerpc und sparc?

...und dann braucht man diese Targets wieder, wenn das Programm auf 
diesen Architekturen lauffähig sein soll.

Der große Vorteil ist natürlich, dass der Großteil von LLVM 
architekturunabhängig ist (Frontend und Optimizier) und wenn man ein 
Monster-Binary baut, dann ist das mit allen Backends immernoch kleiner 
als fünf Kopien von Frontend und Optimizer rumzuschleppen.

> Das dürfte doch schon eher ne Nische sein.

Naja, ein Vorteil ist, dass man diese Nischen nicht vergisst, weil die 
immer "dabei" sind. Da freuen sich alle drüber, die damit arbeiten. In 
deinem Fall ist "AVR" so eine Nische...

von Christopher J. (christopher_j23)


Lesenswert?

Mw E. schrieb:
> Was will man denn zB mit powerpc und sparc?
> Das dürfte doch schon eher ne Nische sein.

Naja, wenn man ein Rechencluster betreibt, dann dürfte man mit PowerPC 
oder SPARC weiter kommen als mit AVR aber ja, das sehe ich auch als 
Nische.

Mikrocontroller im Allgemeinen und AVR im speziellen sehe ich aber auch 
als Nische, auch wenn das aus Sicht dieses Forums vielleicht nicht so 
wahrgenommen wird. In der jeweiligen Nische nehmen dann die jeweiligen 
Architekturen wieder überproportional viel Platz ein, wie eben AVR im 
Embedded-Bereich, wo x86 wiederum eher ein "Nischendasein" fristet.

Wenn man einen Softwareentwickler für Netzwerkhardware fragt ob MIPS 
eine "Nische" darstellt, so wird er ganz sicher antworten, dass doch 
MIPS allgegenwärtig ist. Selbiges gilt für den Automotive-Softwarespezi 
mit seiner Power-Architektur oder eben für den Herr über den Cluster mit 
seinen SPARC-Prozessoren.

Ein sehr großer "Treiber" für die Erweiterung von LLVM auf weitere 
Targets dürfte die Verbreitung von Rust als Programmiersprache sein. 
Gerade im Embedded-Bereich sehe ich da große Stärken gegenüber 
Alternativen wie C/C++ (weil weniger fehleranfällig) oder Java/C#/Go 
(weil keine GC, keine VM notwendig, kompakte Binaries etc.).

von Carl D. (jcw2)


Lesenswert?

Christopher J. schrieb:
> Mw E. schrieb:
>> Was will man denn zB mit powerpc und sparc?
>> Das dürfte doch schon eher ne Nische sein.
>
> Naja, wenn man ein Rechencluster betreibt, dann dürfte man mit PowerPC
> oder SPARC weiter kommen als mit AVR aber ja, das sehe ich auch als
> Nische.
>
> Mikrocontroller im Allgemeinen und AVR im speziellen sehe ich aber auch
> als Nische, auch wenn das aus Sicht dieses Forums vielleicht nicht so
> wahrgenommen wird. In der jeweiligen Nische nehmen dann die jeweiligen
> Architekturen wieder überproportional viel Platz ein, wie eben AVR im
> Embedded-Bereich, wo x86 wiederum eher ein "Nischendasein" fristet.
>
> Wenn man einen Softwareentwickler für Netzwerkhardware fragt ob MIPS
> eine "Nische" darstellt, so wird er ganz sicher antworten, dass doch
> MIPS allgegenwärtig ist. Selbiges gilt für den Automotive-Softwarespezi
> mit seiner Power-Architektur oder eben für den Herr über den Cluster mit
> seinen SPARC-Prozessoren.
>
> Ein sehr großer "Treiber" für die Erweiterung von LLVM auf weitere
> Targets dürfte die Verbreitung von Rust als Programmiersprache sein.
> Gerade im Embedded-Bereich sehe ich da große Stärken gegenüber
> Alternativen wie C/C++ (weil weniger fehleranfällig) oder Java/C#/Go
> (weil keine GC, keine VM notwendig, kompakte Binaries etc.).

Manchmal gibt es auf großen Servern laufende Software, die llvm als 
Compiler verwendet. Wenn man dann als HW-Hersteller nicht aus den 
Rechenzentren verschwinden will, dann muß man sich um ein llvm-Backend 
kümmern. Bei mindestens einem der genannten "Nischenprozessoren" war das 
so.

Und ob Fe2O3 da wirklich Einfluß hat, darf man bezweifeln.

von Yalu X. (yalu) (Moderator)


Lesenswert?

So richtig "8-bit-aware" scheint Clang (noch) nicht zu sein.

Einfaches Beispiel:

1
uint16_t shl8(uint16_t x) {
2
  return x << 8;
3
}

GCC 9.3.0 mit -O1, -O2, -O3 oder -Os:

1
shl8:
2
  mov r25,r24
3
  ldi r24,0
4
  ret

Clang 9.0.1 mit -O1, -O2, -O3 oder -Os:

1
shl8:
2
  lsl r24
3
  rol r25
4
  lsl r24
5
  rol r25
6
  lsl r24
7
  rol r25
8
  lsl r24
9
  rol r25
10
  lsl r24
11
  rol r25
12
  lsl r24
13
  rol r25
14
  lsl r24
15
  rol r25
16
  lsl r24
17
  rol r25
18
  ret

Neuere Clang-Versionen habe ich nicht ausprobiert. Gibt es da vielleicht
schon Fortschritte?

von Christopher J. (christopher_j23)


Lesenswert?

Carl D. schrieb:
> Manchmal gibt es auf großen Servern laufende Software, die llvm als
> Compiler verwendet. Wenn man dann als HW-Hersteller nicht aus den
> Rechenzentren verschwinden will, dann muß man sich um ein llvm-Backend
> kümmern. Bei mindestens einem der genannten "Nischenprozessoren" war das
> so.
>
> Und ob Fe2O3 da wirklich Einfluß hat, darf man bezweifeln.

Das mit dem Einfluss von Rust war nicht auf SPARC, sondern auf AVR und 
MSP430 bezogen und in beiden Fällen bin ich mir relativ sicher, dass das 
ein treibender Faktor war.

Für AVR ist hier ein Blog-Artikel von einem der Hauptentwickler des 
llvm-avr backends:
https://dylanmckay.io/blog/rust/avr/llvm/2017/02/09/safer-microcontrollers-almost-here.html

von S. R. (svenska)


Lesenswert?

Christopher J. schrieb:
> Für AVR ist hier ein Blog-Artikel [...]

Du hättest ja dazusagen können, dass
(a) der Artikel von 2017 ist;
(b) der einzige Artikel im gesamten Blog ist;
(c) keine aktuell relevante Information enthält.
Da steht halt drin, welche Patches man 2017 brauchte, um Rust und AVR zu 
machen. Mehr nicht.

von Malte _. (malte) Benutzerseite


Lesenswert?

S. R. schrieb:
> Du hättest ja dazusagen können, dass
> (a) der Artikel von 2017 ist;
> (b) der einzige Artikel im gesamten Blog ist;
> (c) keine aktuell relevante Information enthält.
> Da steht halt drin, welche Patches man 2017 brauchte, um Rust und AVR zu
> machen. Mehr nicht.
Ich fand es durchaus interessant. Weniger wegen den Patches, sondern um 
zu sehen warum jemand die Motivation hatte den AVR Support zu 
implementieren - und dass es scheinbar wieder ein einziger aus 
Eigeninteresse motivierter Entwickler war, keine größere Gruppe, den wir 
den Support zu verdanken haben.

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Danke für eure Aufkllärung zum LLVM.

@Christopher
Mit Nische wollt ich jetzt nicht sagen, dass ppc und sparc so gut wie 
nicht mehr existieren.
Sondern, dass doch eher sehr wenige Compilerbenutzer einen für sparc/ppc 
brauchen.
ARM, x86 nutzen ja sehr viele und MIPS sollte durch PIC32 sowie das 
ganze Netzwerggerödel auchnoch gut vertreten sein.

von Christopher J. (christopher_j23)


Lesenswert?

S. R. schrieb:
> Du hättest ja dazusagen können, dass
> (a) der Artikel von 2017 ist;

Der ist halt nicht aktuell, dafür aber "historisch wertvoll". A propos 
Historie: Es war eben auch dieser Dylan McKay, der im avr-llvm Repo den 
letzten Commit gemacht hat, bevor es in Mainline-LLVM gemerget wurde und 
sein letzter Commit im Mainline-LLVM ist jetzt 19 Tage her. Ich denke, 
das ist Beweis genug, dass der Kerl keine "Eintagsfliege" ist bzw. war.

von Christopher J. (christopher_j23)


Lesenswert?

Yalu X. schrieb:
> Clang 9.0.1 mit -O1, -O2, -O3 oder -Os:
>
> shl8:
>   lsl r24
>   rol r25
>   lsl r24
>   rol r25
>   lsl r24
>   rol r25
>   lsl r24
>   rol r25
>   lsl r24
>   rol r25
>   lsl r24
>   rol r25
>   lsl r24
>   rol r25
>   lsl r24
>   rol r25
>   ret
>
> Neuere Clang-Versionen habe ich nicht ausprobiert. Gibt es da vielleicht
> schon Fortschritte?

Gerade mit Clang 10.0.0 getestet (seit heute in den Arch-Repos). Leider 
exakt das gleiche Bild. Das dürfte man durchaus mal als Bug melden.

In LLVM-IR sieht die Funktion ja noch sehr kompakt aus.
1
define dso_local zeroext i16 @shl8(i16 zeroext %0) local_unnamed_addr addrspace(1) #0 {
2
  %2 = shl i16 %0, 8
3
  ret i16 %2
4
}

PS:
Wenn ich mir die ganzen "FIXME" hier anschaue, dann frag ich mich schon, 
wie eigentlich AVR-LLVM das "experimental"-Stadium verlassen konnte:
https://github.com/llvm/llvm-project/blob/master/llvm/lib/Target/AVR/AVRInstrInfo.td

: Bearbeitet durch User
von Wilhelm M. (wimalopaan)


Lesenswert?

Christopher J. schrieb:
> Das dürfte man durchaus mal als Bug melden.

Ja bitte machen: Dylan ist da ganz zugänglich ...

von S. R. (svenska)


Lesenswert?

Christopher J. schrieb:
> Der ist halt nicht aktuell, dafür aber "historisch wertvoll".

Ich wollte nicht meckern, dass du den Link hingestellt hast.

Nur hatte ich irgendwie erwartet, dass ich aufs Blog gehe und da dann 
weiterführende Informationen finde (z.B. "was ist seit Version x.y 
passiert", "heute Bug xyzzy gefixt", was man halt so in Entwicklerblogs 
findet) und wurde jämmerlich enttäuscht. Darum mein Beitrag.

Ziemlich leere Blogs verschwinden meist klanglos wieder. Leider.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Christopher J. schrieb:
> Das dürfte man durchaus mal als Bug melden.

Das ist ja kein Bug, sondern eine (noch) nicht implementierte
Optimierung. Als Bug würde ich das höchstens dann sehen, wenn die
Optimierung bereits implementiert wäre, aber aus irgendeinem Grund nicht
zur Anwendung käme.

Deswegen würde ich keinen Bug melden, sondern einen Feature-Request
stellen. Das kommt bei den Entwicklern positiver an als ein Bug-Report,
der implizit immer auch eine Prise Kritik enthält, die in diesem Fall
aber nicht angebracht ist.

von Christopher J. (christopher_j23)


Lesenswert?

S. R. schrieb:
> Ich wollte nicht meckern, dass du den Link hingestellt hast.
>
> Nur hatte ich irgendwie erwartet, dass ich aufs Blog gehe und da dann
> weiterführende Informationen finde (z.B. "was ist seit Version x.y
> passiert", "heute Bug xyzzy gefixt", was man halt so in Entwicklerblogs
> findet) und wurde jämmerlich enttäuscht. Darum mein Beitrag.

Ok, ich werde versuchen in Zukunft "gehaltvollere" Artikel zu verlinken 
;)

Yalu X. schrieb:
> Das ist ja kein Bug, sondern eine (noch) nicht implementierte
> Optimierung.

Da hast du natürlich recht. Die Implementierung ist ja nicht kaputt, 
sondern lediglich "nicht optimal".

Wilhelm M. schrieb:
> Ja bitte machen: Dylan ist da ganz zugänglich ...

Ich würde es ein bisschen als "anmaßend" empfinden, wenn ich als einer 
der von AVR so gut wie keine Ahnung hat, da irgendwelche 
Feature-Requests oder Bug-Reports erstellt. Das überlasse ich lieber 
Leuten, die sich ein bisschen besser auskennen.

von Wilhelm M. (wimalopaan)


Lesenswert?

Christopher J. schrieb:
> Ich würde es ein bisschen als "anmaßend" empfinden, wenn ich als einer
> der von AVR so gut wie keine Ahnung hat, da irgendwelche
> Feature-Requests oder Bug-Reports erstellt. Das überlasse ich lieber
> Leuten, die sich ein bisschen besser auskennen.

Yalu hats entdeckt, ihm gebührt die Ehre.

von Veit D. (devil-elec)


Lesenswert?

Hallo,

Leute, Microchip das den Betrag um satte 5000,- Dollar erhöht. Aktueller 
Stand damit bei 7150,- Dollar. Hat scheinbar mein Anschreiben doch noch 
etwas umdenken bewirkt.  :-)

Der Betrag müßte ja nun für einen Entwickler ausreichend sein denke ich. 
Wie geht das nun weiter? Wartet man bis sich Einer meldet oder liegt 
schon einer auf der Lauer? Oder ...

PS: ich gehe davon aus das der Nickname vom Firmenname abgeleitet ist 
und sich niemand einen Spass erlaubt hat als großzügiger Spender, wie 
auch immer

: Bearbeitet durch User
von J. W. (dilbert)


Lesenswert?

@Veit,

womit hast Du denen im Anschreiben gedroht? ;-)

von Veit D. (devil-elec)


Lesenswert?

Mit Firma aufkaufen und filetieren.  :-)  :-)

Unter anderem hatte ich denen versucht klar zu machen, dass sie sich 
scheinbar nicht vorstellen können wieviel Leute ihre Controller mit C++ 
programmieren und das davon jeder profitiert. Scheinbar hat die 
Supportabteilung die 'Info' nach oben weitergereicht. Nehme ich jetzt 
einmal an. Ist aber jetzt auch egal. Ihre Reaktion war die Einzig 
Richtige. :-)

Ich merke auch gerade das im obigen Text das Erste 'das' eigentlich 
'hat' lauten soll.  :-)

von Veit D. (devil-elec)


Lesenswert?

Hallo,

Leute, es ist vollbracht. AVR bleibt im Spiel.  :-)

von Wilhelm M. (wimalopaan)


Lesenswert?

Und schon gibt es Streit ums Geld ...

von Malte _. (malte) Benutzerseite


Lesenswert?

Danke für die Info.
Ich habe aber nicht herausgefunden, wie es jetzt zur Implementierung 
kam. Also beispielsweise ob das Fundraising da jetzt einen Ausschlag 
gegeben hat.
Beim GCC findet man auch die Optionen (Google hielt die Seiten bei 
meinen Suchbegriffen nicht für relevant genug):
https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/AVR-Options.html#AVR-Options
https://gcc.gnu.org/install/configure.html#avr

Demnach gibt schon seit GCC 10 die Möglichkeit double als 64 Bit Werte 
zu verwenden (war mir neu) :) (Ja das wird auf einem AVR langsam sein, 
aber bei manchen Anwendungen spielt die Präzision eine Rolle und die 
Geschwindigkeit ist Nebensache).

von Lars R. (larsr)


Lesenswert?

Malte _. schrieb:
> Ich habe aber nicht herausgefunden, wie es jetzt zur Implementierung
> kam. Also beispielsweise ob das Fundraising da jetzt einen Ausschlag
> gegeben hat.

Mich würde das auch interessieren. Das ist doch jetzt schon die dritte 
Implementierung, oder?

Vor allem liest sich dieser Maillist-Eintrag sehr bescheiden: Zu den 
ohnehin deutlich schlechteren Ergebnissen der letzten Versionen gibt es 
nun nochmals bis zu 3% mehr Verschlechterung - wenn das kein Fortschritt 
ist...

von Veit D. (devil-elec)


Lesenswert?

Hallo,

wie das mit der Auszahlung ablief davon habe ich keine Ahnung. Die 3 
größten Spender sollen ja Einfluss gehabt haben. Das die mich nicht 
fragen war mir ja klar.  ;-)

Ob die Spendensammlung ausschlaggebend war? Auch hier kann ich nur 
mutmaßen. Ich denke schon. Außer irgendjemand von den Profis benötigt 
avr-gcc so dringend auch in Zukunft das er es für nass gemacht hätte. 
Ich weiß es ehrlich gesagt nicht. Der Reiz des Geldes wird wohl schon 
welche angesprochen haben. Ich hoffe nur das sie ihr Bestens getan 
haben.

Damit sind wir beim 3. Punkt. Ich hatte ehrlich gesagt mit der Aktion 
gehofft bzw. bin davon ausgegangen das damit auch alle Altlasten 
entsorgt werden die den kompilierten Code haben anwachsen lassen. Sieht 
wohl nicht danach aus. Allerdings können die Leute immer noch daran 
feilen. Wir werden sehen.

Wegen double64. Ja das hast du Johann L. hier aus dem Forum zu 
verdanken.

von Oliver S. (oliverso)


Lesenswert?

Veit D. schrieb:
> Damit sind wir beim 3. Punkt. Ich hatte ehrlich gesagt mit der Aktion
> gehofft bzw. bin davon ausgegangen das damit auch alle Altlasten
> entsorgt werden die den kompilierten Code haben anwachsen lassen. Sieht
> wohl nicht danach aus.

Das wichtigste ist, daß jetzt weitere Arbeiten daran eine Zukunft haben. 
Bisher wäre da jeder Aufwand, wie Johan ja auch angemerkt hat, beim 
nächsten Releasewechsel für die Tonne gewesen.

Oliver

von Veit D. (devil-elec)


Lesenswert?

Hallo,

sehe ich jetzt auch so. Erstmal abwarten bis gcc 11 rauskommt und dann 
schauen wir was insgesamt für avr dabei rumkam. Bis dahin kann noch viel 
passieren.

: Bearbeitet durch User
von Wilhelm M. (wimalopaan)


Lesenswert?

In gcc-12 ist das backend noch drin.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Malte _. schrieb:
> https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/AVR-Options.html#AVR-Options
> https://gcc.gnu.org/install/configure.html#avr
>
> Demnach gibt schon seit GCC 10 die Möglichkeit double als 64 Bit Werte
> zu verwenden (war mir neu) :)

Praktisch wertlos und unbenutzbar weil noch niemand die Patches in die 
avr-libc eingebaut hat.

von Sheeva P. (sheevaplug)


Lesenswert?

Lars R. schrieb:
> Kurios finde ich an diesem Beitrag nur, dass immer gefordert wird, dass
> sich jemand beteiligen möge und wenn derjenige, der genau dies jahrelang
> getan hat, praktisch dieselbe Kritik äußert, wird der von denen genau so
> belächelt wie ich.
>
> Diese Geisteshaltung kann ich wirklich nicht nachvollziehen...

Johann hat etwas beigetragen und geleistet. Du nicht. :-)

von Sheeva P. (sheevaplug)


Lesenswert?

Johannes F. schrieb:
> Wechselt das CMS von PHP5 nach PHP7 kannst alle PlugIns wegwerfen, die
> die alte DB-API nutzen. Und das ist ja eine minimale Wartungs-Änderung.
> Richtig lustig würde es ja, wenn man gleich auf verteilte Datenbanken
> wechseln um richtig schön Wolkig zu sein (skaliert so schön), dann
> bricht gleich alles was ACID voraussetzt / annimmt und nicht mit den
> Implikationen des CAP-Theorems klarkommt.

99,9 Prozent der Leute, die mir bislang über den Weg gelaufen sind und 
über CAP geredet haben, haben es nicht einmal ansatzweise verstanden. 
;-)

von Lars R. (larsr)


Lesenswert?

Sheeva P. schrieb:
> Johann hat etwas beigetragen und geleistet. Du nicht. :-)

???

Hast du überhaupt den Beitrag gelesen? Offenbar nicht, denn sonst 
würdest du das nicht schreiben. Es ging darum, dass Johann Kritik geübt 
hatte und dafür von anderen kritisiert wurde - obwohl er geleistet 
hat. Das habe ich angeprangert.

Wenn man deinen Satz so liest, könnte man meinen, dass ich Johann 
kritisiert hätte...

von Jens G. (jensg)


Lesenswert?

Wilhelm M. schrieb:
> Ich denke nicht: zwar stelle ich ein gewissen "Atmen" der Codegrößen
> fest, also mal kleiner, mal größer, aber ein genereller Trend zu größer
> kann ich nicht bestätigen. Gefühlt wird es eher kleiner.

Das kann ich bestätigen.

von Jens G. (jensg)


Lesenswert?

Veit D. schrieb:
> Übrigens werkelt Arduino.cc an einer "Arduino Pro IDE". Momentan noch
> alles Betastatus. Aber die nutzen bei der Pro IDE den clang Compiler.
> Also auch keinen gcc mehr.

Bei beiden Arduino Umgebungen entsteht bei mir beim compilieren hex-Code 
der gleich groß ist. Wo soll es da ein Problem geben?

von Veit D. (devil-elec)


Lesenswert?

Hallo,

@ Jens G.
dein Zitat und deine Antwort passen irgendwie nicht zusammen. Ich hatte 
bezüglich der Pro IDE doch nur eine Feststellung beschrieben.

Wilhelm M. schrieb:
> In gcc-12 ist das backend noch drin.

Was sollte sich hierbei ändern?

von Jens G. (jensg)


Lesenswert?

Feststellung: Die neue "Arduino Pro IDE" und die alte "Arduino IDE" 
verwendet den gleichen Compiler.

Sorry: Bei mir ist der Eindruck entstanden, das es da Unterschiede gibt.

von Raoul D. (raoul_d219)


Lesenswert?

Irgendwelche weiteren Untergangsszenarien? Oder ist alles gut?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

GCC 11.2 compiliert zumindest anstandslos AVR-Code, mit vergleichbarer 
Codeeffizienz wie frühere Versionen. (Habe allerdings jetzt nur ein oder 
zwei Beispiele hier verglichen.)

von Lars R. (larsr)


Lesenswert?

Jörg W. schrieb:
> GCC 11.2 compiliert zumindest anstandslos AVR-Code

Gibt es irgendwo aktuelle Binaries mit LTO-Support? Dann würde ich es 
mir auch einmal anschauen.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Lars R. schrieb:
> Gibt es irgendwo aktuelle Binaries mit LTO-Support?

Für Windows? Keine Ahnung, sorry.

Ich baue mir den Compiler eh seit Jahren selbst. ;-) (Eigentlich schon 
seit Jahrzehnten.)

von Oliver S. (oliverso)


Lesenswert?

Jörg W. schrieb:
> GCC 11.2 compiliert zumindest anstandslos AVR-Code, mit
> vergleichbarer
> Codeeffizienz wie frühere Versionen.

Ist denn überhaupt bestätigt, daß der das neue backend nutzt, oder läuft 
da doch noch das alte?

Oliver

von Klaus R. (klausro)


Lesenswert?

Das ist schon das neue Backend: 
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92729

von Veit D. (devil-elec)


Lesenswert?

Lars R. schrieb:
> Gibt es irgendwo aktuelle Binaries mit LTO-Support? Dann würde ich es
> mir auch einmal anschauen.

Man muss nur das Flag -flto aktivieren.

von Lars R. (larsr)


Lesenswert?

Veit D. schrieb:
> Man muss nur das Flag -flto aktivieren.

Schon klar, aber LTO muss beim Buildvorgang des Compilers aktiviert 
werden bzw. nicht deaktiviert worden sein.

Ich habe schon einige Jahre keine Umgebung mehr um selbst den avr-gcc zu 
bauen. Nach avr-gcc 4.6.2 war ich ausgestiegen und nutze diesen bis 
heute für die wenigen Projekte, bei denen ich einen avr-gcc benötige.

von Veit D. (devil-elec)


Lesenswert?

Hallo,

du kannst die Toolchain von Zak Kemble nehmen oder ich gebe dir meine 
oder ...

von Oliver S. (oliverso)


Lesenswert?

Lars R. schrieb:
> Schon klar, aber LTO muss beim Buildvorgang des Compilers aktiviert
> werden bzw. nicht deaktiviert worden sein.

Was eigentlich alle verfügbaren vorkompilierten avr-gcc toolchains 
erfüllen.

Oliver

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.