От RGBA к ABGR: встроенный неоновый ассемблер для iOS / Xcode

Этот код (очень похожий код, еще не пробовалименно так этот код) компилируется с использованием Android NDK, но не с Xcode / armv7 + arm64 / iOS

Ошибки в комментариях:

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

Что не так с этим кодом?

EDIT1:

Я переписал код с помощью встроенных функций:

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

После разборки я получаю следующий вариант, который я уже пробовал:

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

Теперь мой код выглядит так, но выдает те же ошибки:

__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:

Прочитав разборку, я на самом деле нашел вторую версию функции. Оказывается, что arm64 использует немного другой набор инструкций. Например, сборка arm64 используетrev32.16b v0, v0 вместо. Полный список функций (который я не могу сделать головами или хвостами) ниже:

_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

Ответы на вопрос(1)

Ваш ответ на вопрос