iphone - robado - eliminar cuenta icloud sin contraseña
Compilación condicional en el código del ensamblador(.s) para iPhone: ¿cómo? (2)
Tengo unas pocas líneas de código de ensamblador en un archivo .s. Solo unas pocas rutinas que necesito llamar. Funciona bien cuando se construye para el dispositivo, sin embargo, cuando cambio al iPhone Simulator obtengo los errores "no such instruction". Traté de compilar partes del archivo .s condicionalmente con lo que sé:
#if !TARGET_IPHONE_SIMULATOR
Pero el ensamblador no reconoce estas directivas de preprocesador (por supuesto) y ninguna de las técnicas de compilación condicional para el ensamblador que pude recordar o funcionó, así que me estoy rascando la cabeza ahora sobre cómo evitar la compilación de ese código de ensamblador al construir para el simulador Tampoco veo una opción de proyecto en Xcode que me permita compilar el archivo o no dependiendo de la plataforma de destino.
SOLUCIONADO
Todo lo que me faltaba era el #import apropiado en el archivo ensamblador. No pensé en agregarlo porque la sintaxis de Xcode resaltaba cualquier directiva de preprocesador en verde (comentario), lo que me hizo asumir que estos comandos no se reconocen cuando en realidad funcionan bien.
Esto funciona:
#import "TargetConditionals.h"
#if !TARGET_IPHONE_SIMULATOR
... asm code here ...
#endif
Lo haces con una macro de pre-procesador. Se definen en TargetConditionals.h TARGET_IPHONE_SIMULATOR
debe estar allí. (Sin embargo, debe #incluirlo).
Aquí está el código que uso para detectar ARM vs Thumb vs Simulator:
#include "TargetConditionals.h"
#if defined(__arm__)
# if defined(__thumb__)
# define COMPILE_ARM_THUMB_ASM 1
# else
# define COMPILE_ARM_ASM 1
# endif
#endif
#if TARGET_IPHONE_SIMULATOR
// Simulator defines
#else
// ARM or Thumb mode defines
#endif
// Y así es como puedes usarlo
uint32_t
test_compare_shifted_operand(uint32_t w1) {
uint32_t local;
#if defined(COMPILE_ARM_ASM)
const uint32_t shifted = (1 << 8);
__asm__ __volatile__ (
"mov %[w2], #1/n/t"
"cmp %[w2], %[w1], lsr #8/n/t"
"moveq %[w2], #10/n/t"
"movne %[w2], #11/n/t"
: /
[w1] "+l" (w1),
[w2] "+l" (local)
: /
[shifted] "l" (shifted)
);
#else // COMPILE_ARM_ASM
if ((w1 >> 8) == 1) {
local = 10;
} else {
local = 11;
}
#endif // COMPILE_ARM_ASM
return local;
}