switch stepper activity ios xcode compiler-construction xcode4 arm

stepper - switch ios



¿Hay alguna manera de compilar ARM en lugar de Thumb en Xcode 4? (3)

En primer lugar, el consejo de no compilar 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 compilaciones ARMv7, se recomienda en casi todos los casos que construya para Thumb. Proporciono un poco más de detalle sobre esto en mi respuesta here .

Esta podría ser la razón por la cual esta configuración del compilador 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 compilaciones ARMv6, puede ir a la configuración de compilació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 arquitectura ARMv6. Haga esto de nuevo para crear uno para la arquitectura ARMv7. En la arquitectura ARMv6, agregue el indicador extra del compilador de -mno-thumb (como sugiere Kevin).

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

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 Compilador 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 compilan 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.

Apple recomienda compilar 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 compila para ARM, estableciendo la configuración de compilación para Thumb en No.

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


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


Respecto a su pregunta original: He notado que "Compilar 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 " Compilador para C / C ++ / Objective-C ")!

Si compila con Apple LLVM 3.0, entonces no encontrará la opción "Compilar 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 bloqueos 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 compila para dispositivos armv6.