Domanda

Al momento sto cercando di ottimizzare il codice correlato DSP con Shark e ho scoperto che sto sprecando un sacco di tempo in un galleggiante a intero di conversione:

SInt16 nextInt = nextFloat * 32768.0f + 0.5f;

Come l'iPhone sembra avere un co-processore ARM11 FP, mi chiedo se posso sostituire il mio codice con l'istruzione FTOSI. V'è una certa disponibile presso il sito web ARM, ma non ho alcuna esperienza in mano inlining assemblaggio ottimizzato. qualcuno ha fatto prima?
Penso che potrei inline il codice con

__asm__ volatile

Ma come faccio a verificare se l'istruzione è disponibile?
Come posso passare il mio valore in?

Edit1: Come Louis già sottolineato, ho dimenticato di dire che io sono la compilazione con "Compila per pollice" spento.

EDIT2: Come voglio convertire galleggiante firmato Int16 e non unsigned int, ho cambiato le istruzioni ARM da FTOUI a FTOSI. Questo è stato un errore nel post originale.

È stato utile?

Soluzione

Questo può essere un una domanda ovvia, ma sei sicuro ci si rivolge ARM? Per impostazione predefinita, l'SDK iPhone compila tutte le applicazioni per pollice, che utilizza il software in virgola mobile tutto (compreso float conversione A / int).

In ogni caso, se il dispositivo è dotato di un coprocessore VFP ha l'istruzione. È possibile controllare se ha un coprocessore adeguato leggendo il registro FPSID e fare in modo si tratta di un modello supportato.

Ho il sospetto che è lecito ritenere tutti gli iPhone supportano. Tra l'altro assemblatore di Apple ha il supporto per il codice operativo, e il backend LLVM ARM utilizza per le conversioni di tipo, il che significa che quando Apple ha finalmente supporta LLVM al telefono il loro compilatore sta per generare istruzioni FTOUI.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top