¿Cómo se hace? ¿Qué pasos debo seguir y qué dificultades y trampas hay para considerar?¿Cómo hago el montaje en línea en el iPhone?
Respuesta
He conseguido que esto funcione, gracias a un poco de ayuda en el interior sobre el Apple Devforums, usted debe registrarse si usted es un desarrollador de iPhone dedicado.
Lo primero es lo primero, es __ __asm (), no llanura asm().
En segundo lugar, por defecto, XCode genera un objetivo de recopilación que recopila ensamblado en línea contra el conjunto de instrucciones ARM pulgar, por lo usat no se reconoció como una instrucción apropiada. Para solucionar esto, haz "Obtener información" en el objetivo. Desplácese hacia abajo a la sección "GCC 4.0 - Generación de código" y desmarque "Compilar para pulgar". A continuación, este fragmento siguiente se compilará bien si se establece el SDK activa a "dispositivos"
inline int asm_saturate_to_255 (int a) {
int y;
__asm__("usat %0, #8, %1\n\t" : "=r"(y) : "r"(a));
return y;
}
Naturalmente, ahora no va a trabajar con el simulador de iPhone. Pero TargetConditionals.h tiene define que puedes #ifdef contra. A saber, TARGET_OS_IPHONE y TARGET_IPHONE_SIMULATOR.
Creo que te refieres a __asm __() en lugar de simple asm(). –
¿Por qué no funciona con el simulador de iPhone? ¿Es que ningún ensamblaje funciona en el simulador, o es que debe tener un conjunto diferente de instrucciones de ensamblaje porque se está ejecutando en i386? – Roberto
@Roberto: lo tienes. El simulador se ejecuta en x86, por lo que no puede ejecutar el ensamblado de ARM. Simplemente no compilará. –
Escribo bastante código de ensamblaje ARM Cortex-A8. La CPU en el iPhone es un ARM11 (afaik) por lo que el conjunto de instrucciones básicas es el mismo.
¿Qué estás buscando exactamente? Podría darle algunos ejemplos si lo desea.
EDIT:
Me acabo de enterar que en el iPhone tiene que utilizar el compilador gcc-llvm. Por lo que sé, debería entender la sintaxis del ensamblador en línea de GCC. Si es así, todos los tutoriales de ensamblador en línea de ARM también funcionarán en el iPhone.
Aquí hay una función de ensamblador en línea muy mínima (en C). ¿Podría decirme si compila y funciona en el iPhone? Si funciona, puedo despotricar un poco sobre cómo hacer cosas útiles en el ensamblador ARM en línea, especialmente para la arquitectura ARMv6 y las extensiones DSP.
inline int saturate_to_255 (int a)
{
int y;
asm ("usat %0, #8, %1\n\t" : "=r"(y) : "r"(a));
return y;
}
debe ser equivalente a:
inline int saturate_to_255 (int a)
{
if (a < 0) a =0;
if (a > 255) a = 255;
return a;
}
No he podido obtener esto compilado. He estado intentando a través del XCode de Apple. El compilador está configurado en GCC 4 de manera predeterminada. Si lo compilo usando eso se queja de una instrucción inválida 'usat' y si lo configuro usando llvm-gcc se queja de una arquitectura inválida, 'armv6'. –
prueba gcc -O3 -march = prueba armv6.c –
no es llvm-gcc en realidad un compilador que se dirige a la máquina virtual llvm? – artificialidiot
El dedo pulgar se recomienda para la aplicación que no requiere una operación de flotación pesada. Thumb reduce el tamaño del código y también da como resultado una ejecución de código más rápida.
lo que sólo debe girar pulgar para aplicaciones como juegos en 3D ...
En realidad, como regla, usar el conjunto de instrucciones Thumb es significativamente más lento que usar el conjunto de instrucciones ARM. Como regla general (sin juego de palabras), ganas 1/3 en el tamaño del código y pierdes 1/3 de velocidad. Ver por ej. http://www.arm.com/pdfs/Thumb-2CoreTechnologyWhitepaper-Final4.pdf –
Los registros también se pueden utilizar de forma explícita en asm en línea
void foo(void) {
#if TARGET_CPU_ARM64
__asm ("sub sp, sp, #0x60");
__asm ("str x29, [sp, #0x50]");
#endif
}
- 1. ¿Cómo hago un trazo en el iPhone?
- 2. Montaje en línea estilo Intel en gcc
- 3. Printf sin salto de línea en el montaje
- 4. Cómo leer el montaje atributos
- 5. ¿Cómo puedo simular el montaje?
- 6. ¿Cómo abrir la cámara mientras hago clic en el botón UIButton en el iPhone?
- 7. Dibujar una línea con el dedo toque en el iPhone
- 8. ¿Dónde está el punto de montaje para el iPod/iPhone en Mac?
- 9. ¿Entrar y ABANDONAR en el montaje?
- 10. ¿Qué es el marco de pila en el montaje?
- 11. ¿Cómo hago geocodificación (NO geocodificación inversa) en iPhone?
- 12. barrera volátil frente a compilador con montaje en línea gcc
- 13. Detención y montaje en línea de GCC (Linux)
- 14. Cómo codificar Base64 en el iPhone
- 15. Cómo personalizar el separador TableView en iPhone
- 16. ¿Cómo fopen() en el iPhone?
- 17. ¿Cómo hago una vista de efecto de agua con openGLES en el iPhone?
- 18. Entrando en el depurador en el iPhone
- 19. Desconectado iPhone Mapa con el enrutamiento en línea
- 20. ¿Cómo hago el código Razor en línea dentro de algunos HTML?
- 21. En Django QuerySet, ¿cómo hago la negación en el filtro?
- 22. comportamiento inusual en el bloque de montaje delphi
- 23. error MSB3216 al registrarse el montaje
- 24. Lua en el iPhone
- 25. URI a un archivo local en relación con el montaje
- 26. XNA en el iPhone
- 27. NSOperation en el iPhone
- 28. Cómo lograr el antialiasing de escena completa en el iPhone
- 29. Mostrar imágenes en línea en iPhone, iPad
- 30. Lua en el iPhone?
Niza pregunta, estoy muy interesado en ver la respuestas. – mdec