2010-01-13 5 views
1

Comment s'identifient les codes 'Compiler pour Thumb' et VFP? Sur l'iPhone 2G/3G, je sais que le Thumbset ne comprend pas les calculs en virgule flottante (sur le 3GS, Thumb2 aparemment ..). Alors que se passe-t-il, si l'on compile pour le pouce, mais utilise le code VFP pour les calculs à virgule flottante?iPhone Thumb & VFP

Je sais que c'est assez indepth - mais probablement quelqu'un sait ici ... c

Répondre

3

Je ne suis pas sûr de ce que vous entendez par « utiliser le code VFP ». Voulez-vous dire le code à virgule flottante, qui peut être compilé pour fonctionner sur VFP, ou voulez-vous dire des instructions d'assemblage VFP réelles?

Si vous compilez en mode pouce et que vous utilisez une virgule flottante, un appel de fonction sera effectué pour chaque opération en virgule flottante dans votre code. Ces appels de fonction (ils auront des noms comme __muldf3vfp) basculent le mode sur ARM, déplacent les données dans les registres à virgule flottante, effectuent l'opération, ramènent les données dans des registres d'entiers et retournent. C'est beaucoup de travail pour quelque chose qui n'est qu'une seule instruction si vous compilez en mode ARM, donc n'utilisez pas le pouce dans un code intensif.

Si vous essayez d'utiliser les instructions d'assemblage VFP en mode pouce, vous obtiendrez simplement une erreur d'assembleur.

Comme vous l'avez noté, le 3GS prend en charge le fichier thumb2, auquel a accès aux registres VFP et NEON. Cette situation ne s'applique donc pas. Notez également que le basculement entre le pouce et la compilation ARM peut être effectué par fichier source, de sorte que vous pouvez compiler la plupart de votre projet dans le pouce et utiliser ARM pour quelques routines qui font beaucoup de virgule flottante, par exemple. Si vous voulez écrire le code d'assemblage, vous pouvez basculer entre ARM et le pouce par fonction.

+0

Je voulais dire des instructions d'assemblage VFP. cependant, quel paramètre du compilateur fait que les calculs en virgule flottante sont automatiquement compilés pour le VFP? – genesys

+1

Ajouté à ma réponse que l'utilisation des instructions d'assemblage VFP en mode pouce vous donnera juste une erreur d'assembleur. De plus, le point flottant est compilé à VFP par défaut (à l'exception de la simple précision pour le ciblage du 3GS, qui utilise les instructions NEON). –

+0

hm. Je travaille sur un jeu en 3D qui fait beaucoup de maths fp (calculs matriciels, transformations vectorielles et ainsi de suite) - cependant, le renversement du pouce ne diminue que légèrement les performances au lieu de l'augmenter. Avez-vous une idée de ce que cela pourrait me dire? – genesys

Questions connexes