Hardware-Multiplizierer im GCC nutzen

Gast #545287
Lesenswert?
• ▲
▼
Indem man im Quellcode zwei Operanden mit * verknüpft und beim
Kompilieren den richtigen Prozessortyp angibt.

Der Compiler macht das automatisch richtig, im Zweifelsfall den
erzeugte Assemblercode zu Rate ziehen.
Gast #545314
Lesenswert?
• ▲
▼
Ok, danke, also doch so einfach ;-)

Eigentlich hätte ich auch selbst auf die Idee mit dem Disassembler 
kommen können?!

Ich habe eigentlich nur gefragt, weil der IAR-Compiler (Demo) für den 
MSP430 dessen Hardwaremultiplizierer nicht korrekt verwendet.
Da scheint auf den GCC also schon mehr Verlass zu sein...

Gruß,
Mathias
#545378
Lesenswert?
• ▲
▼
Joerg X. wrote:
> @ Mathias (Gast):
> Beim MSP430 ist der Multiplizierer AFAIK ein Peripheriegerät, beim AVR
> gehört der aber zur ALU :)

Das spielt keine Rolle. Wenn der Compiler an den betreffenden 
Prozessortyp angepaßt ist, erzeugt er für a * b automatisch den 
Maschinencode, der eine Multiplikation bewirkt.

Wenn der Prozessor keinen Multiplizierer hat, wird stattdessen eine 
Bibliotheksroutine aufgerufen, die den Hardwaremultiplizierer 
nachbildet.
Gast #545410
Lesenswert?
• ▲
▼
> Ich meinte damit, dass die "mul"-befehle beim AVR einfacher im
> Compiler zu implementieren sind, als die entsprechenden load/store
> Befehle beim MSP430.

So viel einfacher ist das nicht immer.

Auch bei eingebautem mul-Befehl kann eine C-Multiplikation aus
mehreren Befehlen zusammengesetzt sein, je nach Größe der Operanden.
Während eine char-Multiplikation noch mit einem einzelnen mul-Befehl
auskommt, sind es bei einer int-Multiplikation schon 3 mul- und 2
add-Befehle und bei einer long-Multiplikation sogar 10 mul-, 8 add-
und 6 adc-Befehle. Für letztere wird auf Grund des umfangreicheren
Programmcodes eine Bibliotheksroutine aufgerufen.

Aber wie Uhu Uhuhu schon erwähnte: Diese Befehlssequenzen denkt sich
der Compiler nicht aus, sondern sind vom Compiler-Entwickler
(ggf. parametrierbar) vorgegeben.
Gast #545534
Lesenswert?
• ▲
▼
Wen Du mit AVR-Studio arbeitest, solltest Du auf jeden falls die "libm" 
hinzufügen, die ist per default nicht beigefüg. Das ist eine für den AVR 
optimierte Math-Lib anbstelle der generischen GNU Lib.

[Project] => [Configuration Options] => [Libraries] => [libm.a]
=> [add Object]

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.