我正在尝试使用来自2个不同阵列的数据加载氖寄存器d0和d1,然后将其用作128位q0寄存器。根据ARM NEON指南,这是可能的。
“Neon寄存器是别名的,因此Q寄存器中的数据与其两个相应的D寄存器中的数据相同。例如,q0别名为d0和d1,并且可通过任一寄存器类型访问相同的数据。 “
关于我做错了什么的提示会非常令人沮丧。
void combine(uint8_t * a, uint8_t * b) { //a = 0-7 b = 8 - 15
uint8_t *c = malloc(16*sizeof(uint8_t));
__asm__ (
"ld1 {v0.8b}, [%1]\n\t"
"ld1 {v1.8b}, [%2]\n\t"
"st1 {v0.8h}, [%0]\n\t"
:
:"r" (c), "r" (a), "r" (b)
:
);
int i;
for (i = 0; i < 16; i++) {
printf("%d\t", c[i]); //output 1-7 0 0 0...
}
}