中文
注册

Neon Intrinsic

Neon Intrinsic和编译器的具体实现相关,Clang的neon Intrinsic的功能与官方文档《Arm Neon Intrinsics Reference》(以下简称ANIR文档)一致。

但生成ANIR文档上指定的汇编指令,需指定优化级别大于O0。

ANIR文档获取链接:https://developer.arm.com/documentation/ihi0073/g

使用举例

以内容如下的test.c为例:

#include <arm_neon.h>
int32x2_t test_vsudot_lane_s32(int32x2_t r, int8x8_t a, uint8x8_t b) {
  return vsudot_lane_s32(r, a, b, 0);
}
表1 ANIR文档上vsudot_lane_s32的描述

Intrinsic

Argument

Preparation

Instruction

Result

Supported

Architectures

int32x2_t vsudot_lane_s32(int32x2_t r, int8x8_t a,

uint8x8_t b, const int lane)

r -> Vd.2S

a -> Vn.8B

b -> Vm.4B

0 <= lane <= 1

SUDOT Vd.2S,Vn.8B,Vm.4B[lane]

Vd.2S -> result

A32/A64

使用命令clang -march=armv8.6-a+i8mm test.c -O0 -S生成的结果是以movdupusdot等多条指令组合的形式。

test_vsudot_lane_s32:                   // @test_vsudot_lane_s32
// %bb.0:                               // %entry
        sub     sp, sp, #112            // =112
        str     d0, [sp, #72]
        str     d1, [sp, #64]
        str     d2, [sp, #56]
        ldr     d0, [sp, #72]
        str     d0, [sp, #48]
        ldr     d0, [sp, #64]
        str     d0, [sp, #40]
        ldr     d0, [sp, #56]
        str     d0, [sp, #32]
        ldr     d0, [sp, #32]
        str     d0, [sp, #16]
        ldr     d0, [sp, #48]
        ldr     d1, [sp, #16]
                                        // implicit-def: $q3
        mov     v3.16b, v1.16b
        dup     v1.2s, v3.s[0]
        ldr     d2, [sp, #40]
        str     d0, [sp, #104]
        str     d1, [sp, #96]
        str     d2, [sp, #88]
        ldr     d0, [sp, #104]
        ldr     d1, [sp, #96]
        ldr     d2, [sp, #88]
        usdot   v0.2s, v1.8b, v2.8b
        str     d0, [sp, #80]
        ldr     d0, [sp, #80]
        str     d0, [sp, #24]
        ldr     d0, [sp, #24]
        str     d0, [sp, #8]
        ldr     d0, [sp, #8]
        add     sp, sp, #112            // =112
        ret

使用命令clang -march=armv8.6-a+i8mm test.c -O1 -S生成结果与ANIR文档一致。

test_vsudot_lane_s32:                   // @test_vsudot_lane_s32
// %bb.0:                               // %entry
                                        // kill: def $d2 killed $d2 def $q2
        sudot   v0.2s, v1.8b, v2.4b[0]
        ret
搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词