Question

Je suis en train d'essayer d'optimiser un certain DSP avec le code associé Shark et constaté que je suis en train de perdre beaucoup de temps dans un flotteur à la conversion integer:

SInt16 nextInt = nextFloat * 32768.0f + 0.5f;

Comme l'iPhone semble avoir un co-processeur ARM11 FP, je me demande si je peux remplacer mon code avec l'instruction FTOSI. Il y a une disponible sur le site Web ARM, mais je n'ai aucune expérience dans la main inline montage optimisé. Quelqu'un at-il fait ça avant?
Je pense que je pourrais inline le code avec

__asm__ volatile

Mais comment puis-je vérifier si l'instruction est disponible?
Comment puis-je passer ma valeur?

EDIT1: Comme Louis déjà souligné, j'oublié de mentionner que je suis en compilant avec tournai « Compiler pour le pouce » off.

EDIT2: Comme je veux convertir flotteur signé Int16 et non Int non signé, j'ai changé l'instruction ARM de FTOUI à FTOSI. Ce fut une erreur dans le message original.

Était-ce utile?

La solution

Cela peut être une question évidente, mais êtes-vous sûr que vous ciblez ARM? Par défaut, le SDK iPhone compile toutes les applications pour POUCE, qui utilise tout à virgule flottante du logiciel (y compris la conversion de flotteur / int).

Quoi qu'il en soit, si l'appareil a un coprocesseur VFP il a l'instruction. Vous pouvez vérifier si elle a un coprocesseur approprié en lisant le registre FPSID et en vous assurant qu'il est un modèle pris en charge.

Je pense qu'il est sûr de prendre en charge tous les iPhones il. Entre autres l'assembleur d'Apple a un support pour l'opcode, et le backend LLVM ARM utilise pour les conversions de type, ce qui signifie que quand Apple prend en charge éventuellement LLVM au téléphone leur compilateur va générer des instructions FTOUI.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top