Hallo zusammen,
ELM-CHAN (http://elm-chan.org/docs/avrlib/sqrt32.S) hat eine AVR-ASM
Routine zur Wurzel-Berechnung auf seiner Site.
Diese ist vorgesehen zum Einbau in AVR-GCC Projekte.
Ich möche die Routine jedoch in einem reinen ASM-Projekt nutzen und bin
leider
nicht der Gcc-Notation/Var-Übergabe vertraut.
Könnt Ihr mir hierbei helfen, das wäre nett:
1) In welche Register lege ich denn nun den Eingangswert (uint32_t n)?
2) Und wo liegt am Ende das Ergebnis?
3) Was bedeuten die "seltsamen" Sprungmarken 2f/3f/1b, der Assembler
würde darüber ja stolpern.
avr-gcc Registerverwendung ist hier erklärt:
https://gcc.gnu.org/wiki/avr-gcc#Register_Layout
Wenn du die Funktion so anpasst, dass die calling convention eingehalten
wird und du keine call-saved Register veränderst, dann kannst du die
Funktion einfach aus C heraus aufrufen.
Hier ist (fast) der gleiche Code mit universellen Registernamen. Da
steht auch die Funktion der einzelnen Register mit dabei:
http://elm-chan.org/docs/avrlib/sqrt32.txt
an Wurzelchen:
Falls Interesse besteht: ich hatte mal aus dem Internet (weiß nicht mehr
woher genau) eine Routine nach Ruud van Gessel kopiert und für mich
angepasst; benötigt ca. 300 Takte. Könnte ich ausgraben und hier
vorstellen.
S. Landolt schrieb:> Könnte ich ausgraben und hier vorstellen.
Natürlich gerne!
Auf jeden Fall schonmal vielen Dank für alle Antworten,
das hilft mir weiter!
S. Landolt schrieb:> Falls Interesse besteht: ich hatte mal aus dem Internet (weiß nicht mehr> woher genau) eine Routine nach Ruud van Gessel kopiert
Ja, das Internet ist doch ein wenig vergesslich. Ich habe mich auch
schonmal bei Ruuds Code als Ausgangspunkt einer eigenen Entwicklung
bedient. Aber die Quelle dafür, die ich damals verwendet hatte,
existiert heute nicht mehr.
Möglicherweise ist sie noch über irgendwelche Internet-Archive
verfügbar, deswegen poste ich trotz der definitiven Nichtverfügbarkeit
noch mal den Link, den ich damals verwendet hatte:
http://members.chello.nl/j.beentjes3/Ruud/sqrt32avr.htm
Übrigens ist genau diese Routine (bzw. deren Umsetzung in der runtime
des avr-gcc) eine SEHR schönes Beispiel dafür, wie suboptimal Compiler
sein können (bzw. sein müssen)...