RGBA a ABGR: Inline arm neon asm para iOS / Xcode

Este código (código muy similar, no he probadoexactament este código) compila usando Android NDK, pero no con Xcode / armv7 + arm64 / iOS

Errores en los comentarios:

uint32_t *src;
uint32_t *dst;

#ifdef __ARM_NEON
__asm__ volatile(
    "vld1.32 {d0, d1}, [%[src]] \n" // error: Vector register expected
    "vrev32.8 q0, q0            \n" // error: Unrecognized instruction mnemonic
    "vst1.32 {d0, d1}, [%[dst]] \n" // error: Vector register expected
    :
    : [src]"r"(src), [dst]"r"(dst)
    : "d0", "d1"
    );
#endif

¿Qué tiene de malo este código?

EDIT1:

Reescribí el código usando intrínsecos:

uint8x16_t x = vreinterpretq_u8_u32(vld1q_u32(src));
uint8x16_t y = vrev32q_u8(x);
vst1q_u32(dst, vreinterpretq_u32_u8(y));

Después del desmontaje, obtengo lo siguiente, que es una variación que ya he probado:

vld1.32 {d16, d17}, [r0]!
vrev32.8    q8, q8
vst1.32 {d16, d17}, [r1]!

Así que mi código se ve así ahora, pero da exactamente los mismos errores:

__asm__ volatile("vld1.32 {d0, d1}, [%0]! \n"
                 "vrev32.8 q0, q0         \n"
                 "vst1.32 {d0, d1}, [%1]! \n"
                 :
                 : "r"(src), "r"(dst)
                 : "d0", "d1"
                 );

EDIT2:

Al leer el desmontaje, encontré una segunda versión de la función. Resulta que arm64 usa un conjunto de instrucciones ligeramente diferente. Por ejemplo, el ensamblaje arm64 usarev32.16b v0, v0 en su lugar. La lista completa de funciones (de la que no puedo hacer cara o cruz) está a continuación:

_My_Function:
cmp     w2, #0
add w9, w2, #3
csel    w8, w9, w2, lt
cmp     w9, #7
b.lo    0x3f4
asr w9, w8, #2
ldr     x8, [x0]
mov  w9, w9
lsl x9, x9, #2
ldr q0, [x8], #16
rev32.16b   v0, v0
str q0, [x1], #16
sub x9, x9, #16
cbnz    x9, 0x3e0
ret

Respuestas a la pregunta(3)

Su respuesta a la pregunta