Pregunta

Actualmente estoy tratando de optimizar algún código relacionado con DSP tiburón y descubrí que estoy perdiendo mucho tiempo en un flotante a un entero de conversión:

SInt16 nextInt = nextFloat * 32768.0f + 0.5f;

A medida que el iPhone parece tener un co-procesador ARM11 FP, me pregunto si puedo reemplazar mi código con la instrucción FTOSI. Hay una cierta disponible en la página web de ARM, pero no tengo ninguna experiencia en montaje optimizado mano procesos en línea. alguien ha hecho esto antes?
Creo que podría inline con el código

__asm__ volatile

Pero, ¿cómo puedo comprobar si la instrucción está disponible?
¿Cómo puedo pasar mi valor?

EDIT1: Como ya se señaló Louis, se me olvidó mencionar que soy compilar con "Compilar para el pulgar" apagado.

Edit2: Como Quiero convertir flotador para Int16 firmado y no unsigned int, he cambiado la instrucción ARM de FTOUI a FTOSI. Esto fue un error en el post original.

¿Fue útil?

Solución

Esto puede ser una pregunta obvia, pero ¿está seguro de que usted está apuntando ARM? Por defecto, el iPhone SDK compila todas las aplicaciones para el pulgar, que utiliza el software de punto flotante de todo (incluyendo flotador / conversión int).

De todos modos, si el dispositivo tiene un coprocesador VFP tiene la instrucción. Puede comprobar si tiene un coprocesador adecuada mediante la lectura del registro FPSID y asegurarse de que es un modelo compatible.

Sospecho que es seguro asumir todos los iPhone apoyan. Entre otras cosas ensamblador de Apple tiene soporte para el código de operación, y el back-end LLVM ARM utiliza para las conversiones de tipos, lo que significa que cuando Apple finalmente apoya LLVM en el teléfono de su compilador va a generar instrucciones FTOUI.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top