Files
UnrealEngine/Engine/Source/ThirdParty/Intel/ISPC/ispc-1.24.0/tests/lit-tests/vnni-1.ispc
2025-05-18 13:04:45 +08:00

56 lines
2.6 KiB
Plaintext

// Test checks emitted code for VNNI dot product instructions.
// RUN: %{ispc} %s --target=avx2vnni-i32x4 --emit-asm -o - | FileCheck %s -check-prefixes=CHECK_ALL,CHECK_XMM
// RUN: %{ispc} %s --target=avx2vnni-i32x8 --emit-asm -o - | FileCheck %s -check-prefixes=CHECK_ALL,CHECK_YMM
// RUN: %{ispc} %s --target=avx2vnni-i32x16 --emit-asm -o - | FileCheck %s -check-prefixes=CHECK_ALL,CHECK_YMMX2
// RUN: %{ispc} %s --target=avx512icl-x4 --emit-asm -o - | FileCheck %s -check-prefixes=CHECK_ALL,CHECK_XMM
// RUN: %{ispc} %s --target=avx512spr-x4 --emit-asm -o - | FileCheck %s -check-prefixes=CHECK_ALL,CHECK_XMM
// RUN: %{ispc} %s --target=avx512icl-x8 --emit-asm -o - | FileCheck %s -check-prefixes=CHECK_ALL,CHECK_YMM
// RUN: %{ispc} %s --target=avx512spr-x8 --emit-asm -o - | FileCheck %s -check-prefixes=CHECK_ALL,CHECK_YMM
// RUN: %{ispc} %s --target=avx512icl-x16 --emit-asm -o - | FileCheck %s -check-prefixes=CHECK_ALL,CHECK_ZMM
// RUN: %{ispc} %s --target=avx512spr-x16 --emit-asm -o - | FileCheck %s -check-prefixes=CHECK_ALL,CHECK_ZMM
// REQUIRES: X86_ENABLED && !MACOS_HOST
// CHECK_ALL-LABEL: dot4add_u8i8
// CHECK_XMM: vpdpbusd {{.*}} %xmm
// CHECK_YMM: vpdpbusd {{.*}} %ymm
// CHECK_YMMX2-COUNT-2: vpdpbusd {{.*}} %ymm
// CHECK_YMMX4-COUNT-4: vpdpbusd {{.*}} %ymm
// CHECK_ZMM: vpdpbusd {{.*}} %zmm
void dot4add_u8i8(uniform uint a[], uniform uint b[], uniform int dst[]) {
dst[programIndex] = dot4add_u8i8packed(a[programIndex], b[programIndex], programIndex);
}
// CHECK_ALL-LABEL: dot4add_u8i8_sat
// CHECK_XMM: vpdpbusds {{.*}} %xmm
// CHECK_YMM: vpdpbusds {{.*}} %ymm
// CHECK_YMMX2-COUNT-2: vpdpbusds {{.*}} %ymm
// CHECK_YMMX4-COUNT-4: vpdpbusds {{.*}} %ymm
// CHECK_ZMM: vpdpbusds {{.*}} %zmm
void dot4add_u8i8_sat(uniform uint a[], uniform uint b[], uniform int dst[]) {
dst[programIndex] = dot4add_u8i8packed_sat(a[programIndex], b[programIndex], programIndex);
}
// CHECK_ALL-LABEL: dot2add_i16
// CHECK_XMM: vpdpwssd {{.*}} %xmm
// CHECK_YMM: vpdpwssd {{.*}} %ymm
// CHECK_YMMX2-COUNT-2: vpdpwssd {{.*}} %ymm
// CHECK_YMMX4-COUNT-4: vpdpwssd {{.*}} %ymm
// CHECK_ZMM: vpdpwssd {{.*}} %zmm
void dot2add_i16(uniform uint a[], uniform uint b[], uniform int dst[]) {
dst[programIndex] = dot2add_i16packed(a[programIndex], b[programIndex], programIndex);
}
// CHECK_ALL-LABEL: dot2add_i16_sat
// CHECK_XMM: vpdpwssds {{.*}} %xmm
// CHECK_YMM: vpdpwssds {{.*}} %ymm
// CHECK_YMMX2-COUNT-2: vpdpwssds {{.*}} %ymm
// CHECK_YMMX4-COUNT-4: vpdpwssds {{.*}} %ymm
// CHECK_ZMM: vpdpwssds {{.*}} %zmm
void dot2add_i16_sat(uniform uint a[], uniform uint b[], uniform int dst[]) {
dst[programIndex] = dot2add_i16packed_sat(a[programIndex], b[programIndex], programIndex);
}