ARM NEON使用两个D寄存器作为Q寄存器

时间:2016-09-20 16:39:17

标签: c assembly arm inline-assembly neon

我正在尝试使用来自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...
  }
}

0 个答案:

没有答案