繁体   English   中英

内联aarch64程序集UMOV源语法

[英]Inline aarch64 assembly UMOV source syntax

下面是我尝试使用NEON为AArch64实现快速弹出计数的尝试:

#include <stdio.h>

int count_bits(unsigned long long val) {
  unsigned long long p = 0;
  int c = 0;
  __asm__("DUP  %0.2d, %2        \n\t"
          "CNT  %0.8b, %0.8b     \n\t"
          "ADDP d0, %0.2d        \n\t"
          "UMOV %1, d0           \n\t"
          : "+w"(p), "+r"(c)
          : "r"(val) : "d0");
  return c;
}

int main(int argc, const char *argv[]) {
  printf("Test: %i\n", count_bits(-1ull));
  return 0;
}

错误:

$ gcc test.c -o test
Error: operand 2 should be a SIMD vector element -- `umov x0,d0'

我也不太清楚有关ADDP指令时,符表明,它增加了2个双字,但结果CNT指令存储为8个字节( %0.8bADDP不工作)。 我不应该使用UADALP对组件求和吗?

Error: operand 2 should be a SIMD vector element -- `umov x0,d0'

(“ SIMD向量元素”的定义在ARMv for ARMv8-A的C1.2.4中。)

UMOV <Wd>, <Vn>.<Ts>[<index>]

或64位

UMOV <Xd>, <Vn>.<Ts>[<index>]

在你的情况下,我猜可能是

UMOV %1, v0.D[0] 

但是我不确定代码现在是否正确。 我没有环境。 去测试。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM