Forum: Compiler & IDEs Hardware-Multiplizierer im GCC nutzen


von Mathias (Gast)


Lesenswert?

Hallo zusammen,

ich habe jetzt schon fleißig im Forum und bei Google gesucht, aber 
leider nicht herausbekommen, ob oder wie man den Hardware-Multiplizierer 
des AVR im GCC nutzen kann?!

Wäre super, wenn ihr mir helfen könntet!

Gruß,
Mathias

von Bernd M. (Gast)


Lesenswert?

Zorry,

aber welchen Hardware-Multiplexer in welchem AVR?

Grz.

Bernd M.

von yalu (Gast)


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.

von Bernd M. (Gast)


Lesenswert?

Noch mal Zorry,

habe wohl etwas zu schnell auf Multiplexer getriggert.
Tja, wer richtig lesen kann ist klar im Vorteil.

Bernd M.

von Mathias (Gast)


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

von Joerg X. (Gast)


Lesenswert?

@ Mathias (Gast):
Beim MSP430 ist der Multiplizierer AFAIK ein Peripheriegerät, beim AVR 
gehört der aber zur ALU :)

von Uhu U. (uhu)


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.

von Joerg X. (Gast)


Lesenswert?

@ Uhu Uhuhu (uhu)
Ich meinte damit, dass die "mul"-befehle beim AVR einfacher im Compiler 
zu implementieren sind, als die entsprechenden load/store Befehle beim 
MSP430.

von yalu (Gast)


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.

von Peter (Gast)


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]

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.