diff options
| author | Bernard Ogden <bogden@arm.com> | 2018-08-17 11:29:49 +0000 |
|---|---|---|
| committer | Bernard Ogden <bogden@arm.com> | 2018-08-17 11:29:49 +0000 |
| commit | b828bb2a15c00204514d7a9585ffe743d8858237 (patch) | |
| tree | 5611815c44aad414271d169a6f10e0f162ab571d /llvm/test/MC/Disassembler/AArch64 | |
| parent | 6cb07d2bedb9125c317dc13962b0341a4667ba3b (diff) | |
| download | bcm5719-llvm-b828bb2a15c00204514d7a9585ffe743d8858237.tar.gz bcm5719-llvm-b828bb2a15c00204514d7a9585ffe743d8858237.zip | |
[ARM/AArch64] Support FP16 +fp16fml instructions
Add +fp16fml feature for new FP16 instructions, which are a
mandatory part of FP16 from v8.4-A and an optional part of FP16
from v8.2-A. It doesn't seem to be possible to model this in
LLVM, but the relationship between the options is handled by
the related clang patch.
In keeping with what I think is the usual practice, the fp16fml
extension is accepted regardless of base architecture version.
Builds on/replaces Sjoerd Meijer's patch to add these instructions at
https://reviews.llvm.org/D49839.
Differential Revision: https://reviews.llvm.org/D50228
llvm-svn: 340013
Diffstat (limited to 'llvm/test/MC/Disassembler/AArch64')
| -rw-r--r-- | llvm/test/MC/Disassembler/AArch64/armv8a-fpmul-err.txt | 118 | ||||
| -rw-r--r-- | llvm/test/MC/Disassembler/AArch64/armv8a-fpmul.txt | 64 |
2 files changed, 182 insertions, 0 deletions
diff --git a/llvm/test/MC/Disassembler/AArch64/armv8a-fpmul-err.txt b/llvm/test/MC/Disassembler/AArch64/armv8a-fpmul-err.txt new file mode 100644 index 00000000000..8c8784e0ea9 --- /dev/null +++ b/llvm/test/MC/Disassembler/AArch64/armv8a-fpmul-err.txt @@ -0,0 +1,118 @@ +# RUN: not llvm-mc -triple aarch64-none-linux-gnu -mattr=+v8.2a --disassemble < %s 2>&1 | FileCheck %s --check-prefixes=CHECK-ERROR,FP16-ERROR +# RUN: not llvm-mc -triple aarch64-none-linux-gnu -mattr=+v8.2a,+fullfp16 --disassemble < %s 2>&1 | FileCheck %s --check-prefixes=FP16,CHECK-ERROR +# RUN: not llvm-mc -triple aarch64-none-linux-gnu -mattr=+v8.2a,+fullfp16,-fp16fml --disassemble < %s 2>&1 | FileCheck %s --check-prefixes=FP16,CHECK-ERROR +# RUN: not llvm-mc -triple aarch64-none-linux-gnu -mattr=+v8.2a,-fp16fml,+fullfp16 --disassemble < %s 2>&1 | FileCheck %s --check-prefixes=FP16,CHECK-ERROR +# RUN: not llvm-mc -triple aarch64-none-linux-gnu -mattr=+v8.2a,+fp16fml,-fullfp16 --disassemble < %s 2>&1 | FileCheck %s --check-prefixes=CHECK-ERROR,FP16-ERROR +# RUN: not llvm-mc -triple aarch64-none-linux-gnu -mattr=+v8.2a,+fp16fml,-neon --disassemble < %s 2>&1 | FileCheck %s --check-prefixes=FP16,CHECK-ERROR + +[0x20,0xec,0x22,0x0e] +[0x20,0xec,0xa2,0x0e] +[0x20,0xec,0x22,0x4e] +[0x20,0xec,0xa2,0x4e] +[0x20,0xcc,0x22,0x2e] +[0x20,0xcc,0xa2,0x2e] +[0x20,0xcc,0x22,0x6e] +[0x20,0xcc,0xa2,0x6e] + +#indexed variants: + +[0x20,0x08,0xb2,0x0f] +[0x20,0x48,0xb2,0x0f] +[0x20,0x08,0xb2,0x4f] +[0x20,0x48,0xb2,0x4f] +[0x20,0x88,0xb2,0x2f] +[0x20,0xc8,0xb2,0x2f] +[0x20,0x88,0xb2,0x6f] +[0x20,0xc8,0xb2,0x6f] + +[0x20,0x08,0x92,0x0f] +[0x20,0x48,0x92,0x0f] +[0x20,0x08,0x92,0x4f] +[0x20,0x48,0x92,0x4f] +[0x20,0x88,0x92,0x2f] +[0x20,0xc8,0x92,0x2f] +[0x20,0x88,0x92,0x6f] +[0x20,0xc8,0x92,0x6f] + +#A fullfp16 instruction, for testing the interaction of the features +[0x41,0x08,0xe3,0x1e] + +#CHECK-ERROR: warning: invalid instruction encoding +#CHECK-ERROR: [0x20,0xec,0x22,0x0e] +#CHECK-ERROR: ^ +#CHECK-ERROR: warning: invalid instruction encoding +#CHECK-ERROR: [0x20,0xec,0xa2,0x0e] +#CHECK-ERROR: ^ +#CHECK-ERROR: warning: invalid instruction encoding +#CHECK-ERROR: [0x20,0xec,0x22,0x4e] +#CHECK-ERROR: ^ +#CHECK-ERROR: warning: invalid instruction encoding +#CHECK-ERROR: [0x20,0xec,0xa2,0x4e] +#CHECK-ERROR: ^ +#CHECK-ERROR: warning: invalid instruction encoding +#CHECK-ERROR: [0x20,0xcc,0x22,0x2e] +#CHECK-ERROR: ^ +#CHECK-ERROR: warning: invalid instruction encoding +#CHECK-ERROR: [0x20,0xcc,0xa2,0x2e] +#CHECK-ERROR: ^ +#CHECK-ERROR: warning: invalid instruction encoding +#CHECK-ERROR: [0x20,0xcc,0x22,0x6e] +#CHECK-ERROR: ^ +#CHECK-ERROR: warning: invalid instruction encoding +#CHECK-ERROR: [0x20,0xcc,0xa2,0x6e] +#CHECK-ERROR: ^ +#CHECK-ERROR: warning: invalid instruction encoding +#CHECK-ERROR: [0x20,0x08,0xb2,0x0f] +#CHECK-ERROR: ^ +#CHECK-ERROR: warning: invalid instruction encoding +#CHECK-ERROR: [0x20,0x48,0xb2,0x0f] +#CHECK-ERROR: ^ +#CHECK-ERROR: warning: invalid instruction encoding +#CHECK-ERROR: [0x20,0x08,0xb2,0x4f] +#CHECK-ERROR: ^ +#CHECK-ERROR: warning: invalid instruction encoding +#CHECK-ERROR: [0x20,0x48,0xb2,0x4f] +#CHECK-ERROR: ^ +#CHECK-ERROR: warning: invalid instruction encoding +#CHECK-ERROR: [0x20,0x88,0xb2,0x2f] +#CHECK-ERROR: ^ +#CHECK-ERROR: warning: invalid instruction encoding +#CHECK-ERROR: [0x20,0xc8,0xb2,0x2f] +#CHECK-ERROR: ^ +#CHECK-ERROR: warning: invalid instruction encoding +#CHECK-ERROR: [0x20,0x88,0xb2,0x6f] +#CHECK-ERROR: ^ +#CHECK-ERROR: warning: invalid instruction encoding +#CHECK-ERROR: [0x20,0xc8,0xb2,0x6f] +#CHECK-ERROR: ^ +#CHECK-ERROR: warning: invalid instruction encoding +#CHECK-ERROR: [0x20,0x08,0x92,0x0f] +#CHECK-ERROR: ^ +#CHECK-ERROR: warning: invalid instruction encoding +#CHECK-ERROR: [0x20,0x48,0x92,0x0f] +#CHECK-ERROR: ^ +#CHECK-ERROR: warning: invalid instruction encoding +#CHECK-ERROR: [0x20,0x08,0x92,0x4f] +#CHECK-ERROR: ^ +#CHECK-ERROR: warning: invalid instruction encoding +#CHECK-ERROR: [0x20,0x48,0x92,0x4f] +#CHECK-ERROR: ^ +#CHECK-ERROR: warning: invalid instruction encoding +#CHECK-ERROR: [0x20,0x88,0x92,0x2f] +#CHECK-ERROR: ^ +#CHECK-ERROR: warning: invalid instruction encoding +#CHECK-ERROR: [0x20,0xc8,0x92,0x2f] +#CHECK-ERROR: ^ +#CHECK-ERROR: warning: invalid instruction encoding +#CHECK-ERROR: [0x20,0x88,0x92,0x6f] +#CHECK-ERROR: ^ +#CHECK-ERROR: warning: invalid instruction encoding +#CHECK-ERROR: [0x20,0xc8,0x92,0x6f] +#CHECK-ERROR: ^ + +#FP16-ERROR: warning: invalid instruction encoding +#FP16-ERROR: [0x41,0x08,0xe3,0x1e] +#FP16-ERROR: ^ + +#FP16-NOT: [0x41,0x08,0xe3,0x1e] + diff --git a/llvm/test/MC/Disassembler/AArch64/armv8a-fpmul.txt b/llvm/test/MC/Disassembler/AArch64/armv8a-fpmul.txt new file mode 100644 index 00000000000..5265df1ec79 --- /dev/null +++ b/llvm/test/MC/Disassembler/AArch64/armv8a-fpmul.txt @@ -0,0 +1,64 @@ +# RUN: llvm-mc -triple aarch64-none-linux-gnu -mattr=+fp16fml --disassemble < %s 2>&1 | FileCheck %s --check-prefixes=CHECK,FP16 +# RUN: llvm-mc -triple aarch64-none-linux-gnu -mattr=-fullfp16,+fp16fml --disassemble < %s 2>&1 | FileCheck %s --check-prefixes=CHECK,FP16 + +#A fullfp16 instruction, for testing the interaction of the features +[0x41,0x08,0xe3,0x1e] + +[0x20,0xec,0x22,0x0e] +[0x20,0xec,0xa2,0x0e] +[0x20,0xec,0x22,0x4e] +[0x20,0xec,0xa2,0x4e] +[0x20,0xcc,0x22,0x2e] +[0x20,0xcc,0xa2,0x2e] +[0x20,0xcc,0x22,0x6e] +[0x20,0xcc,0xa2,0x6e] + +#indexed variants: + +[0x20,0x08,0xb2,0x0f] +[0x20,0x48,0xb2,0x0f] +[0x20,0x08,0xb2,0x4f] +[0x20,0x48,0xb2,0x4f] +[0x20,0x88,0xb2,0x2f] +[0x20,0xc8,0xb2,0x2f] +[0x20,0x88,0xb2,0x6f] +[0x20,0xc8,0xb2,0x6f] + +[0x20,0x08,0x92,0x0f] +[0x20,0x48,0x92,0x0f] +[0x20,0x08,0x92,0x4f] +[0x20,0x48,0x92,0x4f] +[0x20,0x88,0x92,0x2f] +[0x20,0xc8,0x92,0x2f] +[0x20,0x88,0x92,0x6f] +[0x20,0xc8,0x92,0x6f] + +#FP16: fmul h1, h2, h3 + +#CHECK: fmlal v0.2s, v1.2h, v2.2h +#CHECK: fmlsl v0.2s, v1.2h, v2.2h +#CHECK: fmlal v0.4s, v1.4h, v2.4h +#CHECK: fmlsl v0.4s, v1.4h, v2.4h +#CHECK: fmlal2 v0.2s, v1.2h, v2.2h +#CHECK: fmlsl2 v0.2s, v1.2h, v2.2h +#CHECK: fmlal2 v0.4s, v1.4h, v2.4h +#CHECK: fmlsl2 v0.4s, v1.4h, v2.4h + +#CHECK: fmlal v0.2s, v1.2h, v2.h[7] +#CHECK: fmlsl v0.2s, v1.2h, v2.h[7] +#CHECK: fmlal v0.4s, v1.4h, v2.h[7] +#CHECK: fmlsl v0.4s, v1.4h, v2.h[7] +#CHECK: fmlal2 v0.2s, v1.2h, v2.h[7] +#CHECK: fmlsl2 v0.2s, v1.2h, v2.h[7] +#CHECK: fmlal2 v0.4s, v1.4h, v2.h[7] +#CHECK: fmlsl2 v0.4s, v1.4h, v2.h[7] + +#CHECK: fmlal v0.2s, v1.2h, v2.h[5] +#CHECK: fmlsl v0.2s, v1.2h, v2.h[5] +#CHECK: fmlal v0.4s, v1.4h, v2.h[5] +#CHECK: fmlsl v0.4s, v1.4h, v2.h[5] +#CHECK: fmlal2 v0.2s, v1.2h, v2.h[5] +#CHECK: fmlsl2 v0.2s, v1.2h, v2.h[5] +#CHECK: fmlal2 v0.4s, v1.4h, v2.h[5] +#CHECK: fmlsl2 v0.4s, v1.4h, v2.h[5] + |

