¿Hay alguna manera de comstackr ARM en lugar de Thumb en Xcode 4?

Apple recomienda comstackr para ARM en lugar de pulgar si hay muchas operaciones de coma flotante. Toda mi aplicación es casi una gran operación de coma flotante.

Esto es lo que dicen en la Guía de flujo de trabajo de desarrollo de aplicaciones de iOS:

Los dispositivos iOS admiten dos conjuntos de instrucciones, ARM y Thumb. Xcode usa las instrucciones de Thumb por defecto porque usar Thumb generalmente reduce el tamaño del código en aproximadamente un 35 por ciento en relación con ARM. Las aplicaciones que tienen un código extensivo de coma flotante pueden funcionar mejor si usan instrucciones ARM en lugar de Pulgar. Puede desactivar Thumb para su aplicación, por lo que se comstack para ARM, estableciendo la configuración de comstackción para Thumb en No.

Sin embargo, no puedo encontrar ninguna configuración de “Comstackr para el pulgar” en mi configuración de comstackción. ¿Lo cambiaron de nombre? ¿O no está disponible ahora con Xcode 4?

En primer lugar, el consejo de no comstackr para el conjunto de instrucciones Thumb para mejorar el rendimiento del punto flotante solo se aplica realmente a los viejos dispositivos ARMv6.

El hardware ARMv7 (iPhone 3G S y más reciente, incluidos todos los iPads) utiliza el conjunto de instrucciones Thumb-2 más eficiente, que no sufre el mismo tipo de ralentización de coma flotante. Para comstackciones ARMv7, se recomienda en casi todos los casos que construya para Thumb. Proporciono un poco más de detalle sobre esto en mi respuesta aquí .

Esta podría ser la razón por la cual esta configuración del comstackdor ya no está expuesta como una opción común, porque los dispositivos ARMv7 son la gran mayoría de los dispositivos iOS que existen.

Si desea hacer esto solo para sus comstackciones ARMv6, puede ir a la configuración de comstackción y pasar el mouse sobre la opción “Otros indicadores C”. Haga clic en el pequeño botón más que aparece a la derecha de esta opción y agregue una condición para la architecture ARMv6. Haga esto de nuevo para crear uno para la architecture ARMv7. En la architecture ARMv6, agregue el indicador extra del comstackdor de -mno-thumb (como sugiere Kevin).

Deberías terminar con algo que se parece a lo siguiente:

Configuraciones de compilación para ARMv6

Lo hago en una de mis aplicaciones, porque vi un aumento en el rendimiento en los dispositivos antiguos ARMv6 con eso. Sin embargo, otra de mis aplicaciones fue más lenta cuando no se construyó para Thumb en ARMv6, por lo que querrá hacer un perfil primero.

Además, actualmente hay un error en el Comstackdor LLVM 3.0 que se incluye con Xcode 4.2 (que desde entonces se ha solucionado en 4.2.1, por lo que escuché) donde los cálculos de punto flotante se comstackn incorrectamente en Thumb para ARMv6. Si está usando esa versión particular de Xcode, tendrá que hacer esto para un comportamiento adecuado en los dispositivos más antiguos.

No sé si se supone que “Compile for Thumb” existe en Xcode 4, pero siempre puede agregar -mno-thumb a la configuración de comstackción Other C Flags .

Respecto a su pregunta original: He notado que “Comstackr para el pulgar” (en la sección “Generación de código” de su “Configuración de creación del proyecto”) en Xcode 4.2.1 solo está disponible si está utilizando LLVM GCC 4.2 (si está configurado en ” Comstackdor para C / C ++ / Objective-C “)!

Si comstack con Apple LLVM 3.0, entonces no encontrará la opción “Comstackr para el pulgar”. Pero, como ya dijo Brad, puede cambiar la opción “Otros indicadores C” para desactivar el modo Thumb.

Otro punto interesante: estoy usando la fuente de amalgamación sqlite en mi proyecto (necesito fts – búsqueda de texto completo) y desde que compilé con LLVM 3.0 tuve lockings extraños y bastante aleatorios en dispositivos armv6 cada vez que accedía a la base de datos: resultó que era debido a que el modo Thumb no está deshabilitado cuando se comstack para dispositivos armv6.