122 lines · plain
1// RUN: llvm-mc -triple aarch64-none-linux-gnu -show-encoding -mattr=+fp16fml < %s | FileCheck %s --check-prefix=CHECK2// RUN: llvm-mc -triple aarch64-none-linux-gnu -show-encoding -mattr=-fullfp16,+fp16fml < %s | FileCheck %s --check-prefix=CHECK3// RUN: not llvm-mc -triple aarch64-none-linux-gnu -show-encoding -mattr=+v8.2a < %s 2>&1 | FileCheck %s --check-prefix=CHECK-NOFP16FML4// RUN: not llvm-mc -triple aarch64-none-linux-gnu -show-encoding -mattr=+v8.2a,+fullfp16 < %s 2>&1 | FileCheck %s --check-prefix=CHECK-NOFP16FML5// RUN: not llvm-mc -triple aarch64-none-linux-gnu -show-encoding -mattr=+v8.2a,+fp16fml,-fullfp16 < %s 2>&1 | FileCheck %s --check-prefix=CHECK-NOFP16FML6// RUN: not llvm-mc -triple aarch64-none-linux-gnu -show-encoding -mattr=+v8.2a,+fp16fml,-neon < %s 2>&1 | FileCheck %s --check-prefix=CHECK-NO-FP16FML-NOR-NEON7// RUN: not llvm-mc -triple aarch64-none-linux-gnu -show-encoding -mattr=+v8.2a,-neon < %s 2>&1 | FileCheck %s --check-prefix=CHECK-NO-FP16FML-NOR-NEON8 9//------------------------------------------------------------------------------10// ARMV8.2-A Floating Point Multiplication11//------------------------------------------------------------------------------12 13FMLAL V0.2S, V1.2H, V2.2H14FMLSL V0.2S, V1.2H, V2.2H15FMLAL V0.4S, V1.4H, V2.4H16FMLSL V0.4S, V1.4H, V2.4H17FMLAL2 V0.2S, V1.2H, V2.2H18FMLSL2 V0.2S, V1.2H, V2.2H19FMLAL2 V0.4S, V1.4H, V2.4H20FMLSL2 V0.4S, V1.4H, V2.4H21 22//CHECK: fmlal v0.2s, v1.2h, v2.2h // encoding: [0x20,0xec,0x22,0x0e]23//CHECK: fmlsl v0.2s, v1.2h, v2.2h // encoding: [0x20,0xec,0xa2,0x0e]24//CHECK: fmlal v0.4s, v1.4h, v2.4h // encoding: [0x20,0xec,0x22,0x4e]25//CHECK: fmlsl v0.4s, v1.4h, v2.4h // encoding: [0x20,0xec,0xa2,0x4e]26//CHECK: fmlal2 v0.2s, v1.2h, v2.2h // encoding: [0x20,0xcc,0x22,0x2e]27//CHECK: fmlsl2 v0.2s, v1.2h, v2.2h // encoding: [0x20,0xcc,0xa2,0x2e]28//CHECK: fmlal2 v0.4s, v1.4h, v2.4h // encoding: [0x20,0xcc,0x22,0x6e]29//CHECK: fmlsl2 v0.4s, v1.4h, v2.4h // encoding: [0x20,0xcc,0xa2,0x6e]30 31//CHECK-NOFP16FML: error: instruction requires: fp16fml{{$}}32//CHECK-NOFP16FML: error: instruction requires: fp16fml{{$}}33//CHECK-NOFP16FML: error: instruction requires: fp16fml{{$}}34//CHECK-NOFP16FML: error: instruction requires: fp16fml{{$}}35//CHECK-NOFP16FML: error: instruction requires: fp16fml{{$}}36//CHECK-NOFP16FML: error: instruction requires: fp16fml{{$}}37//CHECK-NOFP16FML: error: instruction requires: fp16fml{{$}}38//CHECK-NOFP16FML: error: instruction requires: fp16fml{{$}}39 40//CHECK-NO-FP16FML-NOR-NEON: error: instruction requires: fp16fml neon{{$}}41//CHECK-NO-FP16FML-NOR-NEON: error: instruction requires: fp16fml neon{{$}}42//CHECK-NO-FP16FML-NOR-NEON: error: instruction requires: fp16fml neon{{$}}43//CHECK-NO-FP16FML-NOR-NEON: error: instruction requires: fp16fml neon{{$}}44//CHECK-NO-FP16FML-NOR-NEON: error: instruction requires: fp16fml neon{{$}}45//CHECK-NO-FP16FML-NOR-NEON: error: instruction requires: fp16fml neon{{$}}46//CHECK-NO-FP16FML-NOR-NEON: error: instruction requires: fp16fml neon{{$}}47//CHECK-NO-FP16FML-NOR-NEON: error: instruction requires: fp16fml neon{{$}}48 49# Checks with the maximum index value 7:50fmlal V0.2s, v1.2h, v2.h[7]51fmlsl V0.2s, v1.2h, v2.h[7]52fmlal V0.4s, v1.4h, v2.h[7]53fmlsl V0.4s, v1.4h, v2.h[7]54fmlal2 V0.2s, v1.2h, v2.h[7]55fmlsl2 V0.2s, v1.2h, v2.h[7]56fmlal2 V0.4s, v1.4h, v2.h[7]57fmlsl2 V0.4s, v1.4h, v2.h[7]58 59# Some more checks with a different index bit pattern to catch60# incorrect permutations of the index (decimal 7 is 0b111):61fmlal V0.2s, v1.2h, v2.h[5]62fmlsl V0.2s, v1.2h, v2.h[5]63fmlal V0.4s, v1.4h, v2.h[5]64fmlsl V0.4s, v1.4h, v2.h[5]65fmlal2 V0.2s, v1.2h, v2.h[5]66fmlsl2 V0.2s, v1.2h, v2.h[5]67fmlal2 V0.4s, v1.4h, v2.h[5]68fmlsl2 V0.4s, v1.4h, v2.h[5]69 70//CHECK: fmlal v0.2s, v1.2h, v2.h[7] // encoding: [0x20,0x08,0xb2,0x0f]71//CHECK: fmlsl v0.2s, v1.2h, v2.h[7] // encoding: [0x20,0x48,0xb2,0x0f]72//CHECK: fmlal v0.4s, v1.4h, v2.h[7] // encoding: [0x20,0x08,0xb2,0x4f]73//CHECK: fmlsl v0.4s, v1.4h, v2.h[7] // encoding: [0x20,0x48,0xb2,0x4f]74//CHECK: fmlal2 v0.2s, v1.2h, v2.h[7] // encoding: [0x20,0x88,0xb2,0x2f]75//CHECK: fmlsl2 v0.2s, v1.2h, v2.h[7] // encoding: [0x20,0xc8,0xb2,0x2f]76//CHECK: fmlal2 v0.4s, v1.4h, v2.h[7] // encoding: [0x20,0x88,0xb2,0x6f]77//CHECK: fmlsl2 v0.4s, v1.4h, v2.h[7] // encoding: [0x20,0xc8,0xb2,0x6f]78 79//CHECK: fmlal v0.2s, v1.2h, v2.h[5] // encoding: [0x20,0x08,0x92,0x0f]80//CHECK: fmlsl v0.2s, v1.2h, v2.h[5] // encoding: [0x20,0x48,0x92,0x0f]81//CHECK: fmlal v0.4s, v1.4h, v2.h[5] // encoding: [0x20,0x08,0x92,0x4f]82//CHECK: fmlsl v0.4s, v1.4h, v2.h[5] // encoding: [0x20,0x48,0x92,0x4f]83//CHECK: fmlal2 v0.2s, v1.2h, v2.h[5] // encoding: [0x20,0x88,0x92,0x2f]84//CHECK: fmlsl2 v0.2s, v1.2h, v2.h[5] // encoding: [0x20,0xc8,0x92,0x2f]85//CHECK: fmlal2 v0.4s, v1.4h, v2.h[5] // encoding: [0x20,0x88,0x92,0x6f]86//CHECK: fmlsl2 v0.4s, v1.4h, v2.h[5] // encoding: [0x20,0xc8,0x92,0x6f]87 88//CHECK-NOFP16FML: error: instruction requires: fp16fml{{$}}89//CHECK-NOFP16FML: error: instruction requires: fp16fml{{$}}90//CHECK-NOFP16FML: error: instruction requires: fp16fml{{$}}91//CHECK-NOFP16FML: error: instruction requires: fp16fml{{$}}92//CHECK-NOFP16FML: error: instruction requires: fp16fml{{$}}93//CHECK-NOFP16FML: error: instruction requires: fp16fml{{$}}94//CHECK-NOFP16FML: error: instruction requires: fp16fml{{$}}95//CHECK-NOFP16FML: error: instruction requires: fp16fml{{$}}96//CHECK-NOFP16FML: error: instruction requires: fp16fml{{$}}97//CHECK-NOFP16FML: error: instruction requires: fp16fml{{$}}98//CHECK-NOFP16FML: error: instruction requires: fp16fml{{$}}99//CHECK-NOFP16FML: error: instruction requires: fp16fml{{$}}100//CHECK-NOFP16FML: error: instruction requires: fp16fml{{$}}101//CHECK-NOFP16FML: error: instruction requires: fp16fml{{$}}102//CHECK-NOFP16FML: error: instruction requires: fp16fml{{$}}103//CHECK-NOFP16FML: error: instruction requires: fp16fml{{$}}104 105//CHECK-NO-FP16FML-NOR-NEON: error: instruction requires: fp16fml neon{{$}}106//CHECK-NO-FP16FML-NOR-NEON: error: instruction requires: fp16fml neon{{$}}107//CHECK-NO-FP16FML-NOR-NEON: error: instruction requires: fp16fml neon{{$}}108//CHECK-NO-FP16FML-NOR-NEON: error: instruction requires: fp16fml neon{{$}}109//CHECK-NO-FP16FML-NOR-NEON: error: instruction requires: fp16fml neon{{$}}110//CHECK-NO-FP16FML-NOR-NEON: error: instruction requires: fp16fml neon{{$}}111//CHECK-NO-FP16FML-NOR-NEON: error: instruction requires: fp16fml neon{{$}}112//CHECK-NO-FP16FML-NOR-NEON: error: instruction requires: fp16fml neon{{$}}113//CHECK-NO-FP16FML-NOR-NEON: error: instruction requires: fp16fml neon{{$}}114//CHECK-NO-FP16FML-NOR-NEON: error: instruction requires: fp16fml neon{{$}}115//CHECK-NO-FP16FML-NOR-NEON: error: instruction requires: fp16fml neon{{$}}116//CHECK-NO-FP16FML-NOR-NEON: error: instruction requires: fp16fml neon{{$}}117//CHECK-NO-FP16FML-NOR-NEON: error: instruction requires: fp16fml neon{{$}}118//CHECK-NO-FP16FML-NOR-NEON: error: instruction requires: fp16fml neon{{$}}119//CHECK-NO-FP16FML-NOR-NEON: error: instruction requires: fp16fml neon{{$}}120//CHECK-NO-FP16FML-NOR-NEON: error: instruction requires: fp16fml neon{{$}}121 122