Forum: Compiler & IDEs GCC ARM Infos über differenzen Architektur-Versionen


von Erik (Gast)


Lesenswert?

Hallo,

ich suche eine genaue Liste welche ARM32-Befehle der GCC bei welcher 
gewünschten ARM-Architektur "-march=???" unterstützt (auch für 
Inline-Assembler) und bei welcher CPU-Wahl "-mcpu=???" welche 
Architektur gewählt wird.

Google hat mir leider nichts genaues gebracht.
Muss ich mich etwa durch den GCC-Source kämpfen? (das würde ich gerne 
vermeiden)

Danke für alle Antworten

Erik

von Andreas K. (a-k)


Lesenswert?

> ich suche eine genaue Liste welche ARM32-Befehle der GCC bei welcher
> gewünschten ARM-Architektur "-march=???" unterstützt

Wozu?

> (auch für Inline-Assembler)

Interessiert den Compiler nicht, der reicht sie nur an den Assembler 
durch.

> Muss ich mich etwa durch den GCC-Source kämpfen?

Ich fürchte schon. Kannst dich aber auf den Teil für ARM beschränken, 
also den Inhalt von gcc/config/arm.

von Erik (Gast)


Lesenswert?

Hallo,

> Wozu?
Weil ich einen "ARM-Clone" programmieren muss und demzufolge rauskriegen 
möchte welche CPU-Version ich im GCC auswählen muss.

> Interessiert den Compiler nicht,
> der reicht sie nur an den Assembler durch.
Auch die Architektur-Auswahl-Parameter?

> Ich fürchte schon.
Ich habs befürchtet.

> ... also den Inhalt von gcc/config/arm.
Danke

Erik

von Rolf Magnus (Gast)


Lesenswert?

> Weil ich einen "ARM-Clone" programmieren muss

Genauer weißt du es nicht?

>> Interessiert den Compiler nicht,
>> der reicht sie nur an den Assembler durch.
> Auch die Architektur-Auswahl-Parameter?

Natürlich reicht er die nicht nur an den Assembler durch.

von Andreas K. (a-k)


Lesenswert?

> Natürlich reicht er die nicht nur an den Assembler durch.

Ich wollte an dieser Stelle ausdrücken, dass der Compiler den Code in 
Inline-Assembly einfach durchreicht und nicht daraufhin überprüft ob die 
Befehle im spezifizierten Core auch erlaubt sind. Das macht an dieser 
Stelle erst der Assembler.

von Rolf Magnus (Gast)


Lesenswert?

Und ich wollte darauf hinweisen, daß die Architektur-Auswahl-Parameter 
natürlich auch den Compiler beeinflussen und nicht nur an den Assembler 
weitergegeben werden. Das war nämlich die Frage im Anschluß an dein 
Posting.

von Erik (Gast)


Lesenswert?

Hallo,

>> Weil ich einen "ARM-Clone" programmieren muss
> Genauer weißt du es nicht?

Doch, ich weis genau das er nicht von ARM ist und der Entwickler auch 
keine Lizenz hat. Mit "Clone" ist gemeint "kein Standard-Core". Dieser 
Core unterstützt z.B. CLZ und LDREX/STREX aber keinen der 
Multiply-Long-Befehle. Der unterstütze Befehlsumfang liegt zwischen 
ARMv3 und ARMv6. Alle nicht unterstützen Befehle müssen zur Laufzeit 
emuliert werden und diesen Overhead möchte ich so gering wie möglich 
halten. Also suche ich eine GCC-Einstellung die einen guten Kompromiss, 
aus der Unterstützung von Befehlen mit Beschleunigungswirkung und der 
Benutzung von nicht unterstützen Befehlen mit Bremswirkung, darstellt.

Den Weg einen Post-Processor für den erzeugten Code zu schreiben der die 
nicht unterstützen Befehle gegen unterstützte Befehl(sgruppen) 
austauscht möchte ich auf jeden Fall nicht gehen. Da würde ich eher 
Versuchen dem GCC eine weitere ARM-Architektur beizubringen (ist das 
eigentlich schwer?).


Danke noch mal für die Antworten
Erik

von Andreas K. (a-k)


Lesenswert?

> Da würde ich eher Versuchen dem GCC eine weitere ARM-Architektur
> beizubringen (ist das eigentlich schwer?).

Sollte machbar sein. Vor allem, wenn es darum geht, nicht unterstützte 
Befehle zu vermeiden, denn dazu müssen die nur entsprechend qualifiziert 
werden (oder rausgeworfen, wenn's quick-and-dirty sein soll). Für neue 
bislang nicht unterstützte Befehle könnte es komplizierter werden.

von Erik (Gast)


Lesenswert?

Guten Morgen,

Ich hab mir, schweren Herzens, dann doch mal den GCC-Source angesehen 
und nach Unterschieden und Gemeinsamkeiten zwischen ARMv3/ARMv4 bzw. 
ARMv4/ARMv5 gesucht. Ich wollte es zwar vermeiden aber so enorm 
schwierig schein das dazubasteln (halbwegs ordentlich) einer weiteren 
ARM-Architektur nicht zu sein, ist eben etwas Arbeit. Der 
Core-Entwickler hat mir versichert das alle vorhandenen Befehle so 
unterstützt werden wie ARM das spezifiziert hat. Nur ein einziger Befehl 
(STREX) hat ein kleines Zusatzschmankerl das nicht von ARM stammt (an 
dieser Stelle wirds für den Core-Entwickler wohl definitiv illegal). Es 
wurde aber ansonsten alles mögliche, was nicht dringendst gebraucht 
wird, raus geworfen. So entstand eben ein bunter Mix aus ARMv3 bis ARMv6 
und ich muss das ganze nun mit Software versorgen.

Danke noch mal für Deine Antworten.

Grüße
Erik

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.