FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

AArch64のSVE命令コンパイルを試したい

現時点での最新版は以下のようにしてダウンロードできる。

curl -L https://developer.arm.com/-/media/Files/downloads/gnu/11.3.rel1/binrel/arm-gnu-toolchain-11.3.rel1-x86_64-aarch64-none-linux-gnu.tar.xz | tar xJ

memcpyはデフォルトでSVEを生成できるのだろうか?

void copy_data_scalar(int8_t *dest_data, int8_t *source_data, const int data_num)
{
  memcpy (dest_data, source_data, data_num);
}
make memcpy.aarch64
aarch64-none-linux-gnu-gcc -march=armv8-a+sve main.c -o memcpy.aarch64 -static
aarch64-none-linux-gnu-objdump -d memcpy.aarch64 > memcpy.aarch64.dmp

どれを使えばSVEが生成されるのだろう?おそらくこのmemcpy_a64fxだと思われる。

0000000000416ac0 <__memcpy_a64fx>:
  416ac0:       0420e3e7        cntb    x7
  416ac4:       eb07045f        cmp     x2, x7, lsl #1
  416ac8:       54000148        b.hi    416af0 <__memcpy_a64fx+0x30>  // b.pmore
  416acc:       25221ce1        whilelo p1.b, x7, x2
  416ad0:       25221fe0        whilelo p0.b, xzr, x2
  416ad4:       a400a020        ld1b    {z0.b}, p0/z, [x1]
  416ad8:       a401a421        ld1b    {z1.b}, p1/z, [x1, #1, mul vl]
  416adc:       e400e000        st1b    {z0.b}, p0, [x0]
  416ae0:       e401e401        st1b    {z1.b}, p1, [x0, #1, mul vl]
  416ae4:       d65f03c0        ret
  416ae8:       d503201f        nop
  416aec:       d503201f        nop
  416af0:       eb070c5f        cmp     x2, x7, lsl #3
  416af4:       54000468        b.hi    416b80 <__memcpy_a64fx+0xc0>  // b.pmore
  416af8:       8b020004        add     x4, x0, x2
  416afc:       8b020025        add     x5, x1, x2