Festkommamultiplikation mit ARM

Gast #1943489
Lesenswert?
• ▲
▼
Ich habe eine Frage.

Hintergrund:

Mit einem ARM7TDMI berechne ich einiges (mit Additionen und 
Multiplikationen) und nehme dazu Fließkommazahlen (32 bit) bzw 
Festkommazahlen (32bit).

Mein ARM hat keine FPU und deshalb ist Floatingpoint relativ langsam.
Falls ich die Berechnungen mit Festkommazahlen implementiere sind diese 
"nur" 2 mal so schnell.

Ich dachte ursprünglich, dass Festkommaimplementierungen sehr viel 
schneller sind. An den Additionen kann es nicht liegen, da diese 
"gleich" sind wie normale Integer.

Bei den Multiplikationen verwende ich als Zwischenergebnis eine 64 bit 
Zahl und schiebe anschließend zurück.

#define fmult(A,B) (long)(((long long)A * (long long)B) >> KOMMASTELLEN)

Zur eigentlichen Frage:
Wie kann ich die Multiplikation verbessern?
#1945890
Lesenswert?
• ▲
▼
Festkommamultiplikation ist ganz praktisch, wenn man Hardware-Support 
für ganzzahlige Multiplikation hat. Bis rauf zu 32x32=64bit hat ARM das 
in Form eines Befehls, aber mit 64x64=64bit kann ARM nicht dienen und 
damit wird es komplizierter. Klüger wär's wohl, diesen 32x32=64bit 
Befehl auch zu nutzen, wenn man sowieso nicht mehr als den braucht.

Im GCC kann man das beispielsweise recht wirkungsvoll mit
1
inline long fmult(long x, long y)
2
{
3
  long long r;
4
  asm ("smull %0,%H0,%1,%2" : "=&r"(r) : "r"(x), "r"(y));
5
  return r >> KOMMASTELLEN;
6
}
Gast #1946909
Lesenswert?
• ▲
▼
Vielen Dank A.K.! Es ist ja super, dass es dafür einen extra Befehl 
gibt.

Ich habe gesehen, es gibt auch den  "smlal" Befehl, könntest du mir kurz 
skizzieren, wie ich den mit dem "asm" benutzen kann?

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.