ich derzeit versuche, einige DSP bezogenen Code mit Shark zu optimieren und fand, dass ich in einem Schwimmer viel Zeit vergeude Umwandlung in Integer:Schwimmer auf Integer Konvertierung mit iPhones SIMD Schwimmereinheit
SInt16 nextInt = nextFloat * 32768.0f + 0.5f;
Da die iPhone scheint einen ARM11 FP-Co-Prozessor zu haben, ich frage mich, ob ich meinen Code durch den FTOSI-Befehl ersetzen kann. Es gibt einige documentation auf der ARM-Website, aber ich habe keine Erfahrung in Inlining Hand optimierte Montage. Hat jemand das schon mal gemacht?
Ich glaube, ich mit
__asm__ volatile
den Code inline könnte Aber wie kann ich überprüfen, ob der Befehl verfügbar ist?
Wie kann ich meinen Wert weitergeben?
EDIT1: Wie schon Louis darauf hingewiesen, habe ich vergessen zu erwähnen, dass ich kompilieren mit "Compile for Thumb" ausgeschaltet bin.
EDIT2: Da ich float zu signierten Int16 und nicht vorzeichenlosen Int konvertieren möchte, änderte ich die ARM-Anweisung von FTOUI nach FTOSI. Dies war ein Fehler im ursprünglichen Beitrag.
Da mein Code Fließkomma-intensiv ist, habe ich "Compile for Thumb" deaktiviert. (Ich denke, das setzt den "-marm" Compiler-Schalter) –
Sie sind richtig, wollte nur sicher gehen. Es scheint irgendwie schockierend GCC verwendet FTOUI nicht für die Konvertierungen selbst und erfordert Inline-Asm, weshalb ich überprüft habe. Ich füge hinzu, was eine Antwort auf das sein sollte, was ich denke, dass Sie fragen. –
Ich denke, GCC hat keine Chance zu erkennen, dass ich versuche, eine Float-to-Int-Konvertierung durchzuführen, da es sich nicht um einen einfachen Cast handelt, sondern um eine Mischung aus Mul, Add und Cast. Ich werde den Asm untersuchen, den GCC später ausgibt und hier posten. –