Вы должны на самом деле вернуть значение. Я думаю, что вы хотите что-то вроде этого:
unsigned desneon(unsigned v0[8])
{
unsigned outlo;
__asm__ volatile (
"vld1.32 {d2- d5}, [%1] \n\t"
"vld1.32 {d6- d9}, [%1] \n\t"
"vmul.s32 d0, d2, d6 \n\t" //d0= d2*d6
"vmla.s32 d0, d3, d7 \n\t" //d0 = d0 + d3*d7
"vmla.s32 d0, d4, d8 \n\t" //d0 = d0 + d4*d8
"vmla.s32 d0, d5, d9 \n\t" //d0 = d0 + d5*d9
"vpadd.s32 d0, d0 \n\t" //d0 = d[0] + d[1]
"vmov %0, r4, d0 \n\t"
:"=r"(outlo)
:"r"(v0)
:"d0", "d2", "d3", "d4", "d5", "d6", "d7", "d8", "d9", "r4"
);
return outlo;
}
Я проверил, и это, казалось, дало мне правильный результат. Тем не менее, как говорит @ Nyx0uf, возможно, вы захотите взглянуть на инфраструктуру Accelerate - там есть много полезного для выполнения стандартных вызовов методов, а не для написания NEON вручную.