Frage

Ich versuche derzeit, einen DSP -bezogenen Code mit Shark zu optimieren, und stellte fest, dass ich viel Zeit in einem Float to Ganzig -Conversion verschwende:

SInt16 nextInt = nextFloat * 32768.0f + 0.5f;

Da das iPhone einen ARM11-FP-Co-Prozessor zu haben scheint, frage ich mich, ob ich meinen Code durch die FTOSI-Anweisung ersetzen kann. Es gibt einige Dokumentation Auf der ARM -Website erhältlich, aber ich habe keine Erfahrung darin, hand optimierte Montage in der Hand zu haben. Hat das schon jemand getan?
Ich denke, ich könnte den Code mit investieren

__asm__ volatile

Aber wie überprüfe ich, ob die Anweisung verfügbar ist?
Wie kann ich meinen Wert eingeben?

Edit1: Wie Louis bereits betonte, habe ich vergessen zu erwähnen, dass ich mit "Compile for Thumb" zusammenstelle.

Edit2: Da ich Float in Signed INT16 und nicht unsigned INT konvertieren möchte, habe ich die ARM -Anweisung von ftoui in ftosi geändert. Dies war ein Fehler im ursprünglichen Beitrag.

War es hilfreich?

Lösung

Dies mag eine offensichtliche Frage sein, aber sind Sie sicher, dass Sie sich auf den Arm zielen? Standardmäßig erstellt das iPhone SDK alle Apps für Daumen, die Software -Schwimmpunkte alles verwenden (einschließlich Float/Int -Conversion).

Wenn das Gerät über einen VFP -Coprozessor verfügt, hat es die Anweisung. Sie können überprüfen, ob es über einen geeigneten Coprozessor verfügt, indem Sie das FPSID -Register lesen und sicherstellen, dass es sich um ein unterstütztes Modell handelt.

Ich vermute, es ist sicher anzunehmen, dass alle iPhones es unterstützen. Unter anderem unterstützt Apple's Assembler den Opcode, und das LLVM -ARM -Backend verwendet ihn für die Typkonvertierungen. Wenn Apple letztendlich LLVM auf dem Telefon unterstützt, wird ihr Compiler FTOUI -Anweisungen generieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top