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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren