mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-26 12:43:36 +01:00
2ce0a5d73d
This patch upstreams support for the Armv8.6-a Matrix Multiplication Extension. A summary of the features can be found here: https://community.arm.com/developer/ip-products/processors/b/processors-ip-blog/posts/arm-architecture-developments-armv8-6-a This patch includes: - Assembly support for AArch64 only (no SVE or Neon) - Intrinsics Support for AArch64 Armv8.6a Matrix Multiplication Instructions (No bfloat16 matrix multiplication) No IR types or C Types are needed for this extension. This is part of a patch series, starting with BFloat16 support and the other components in the armv8.6a extension (in previous patches linked in phabricator) Based on work by: - Luke Geeson - Oliver Stannard - Luke Cheeseman Reviewers: ostannard, t.p.northover, rengolin, kmclaughlin Reviewed By: kmclaughlin Subscribers: kmclaughlin, kristof.beyls, hiraditya, danielkiss, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D77871
35 lines
1.8 KiB
ArmAsm
35 lines
1.8 KiB
ArmAsm
// RUN: not llvm-mc -triple aarch64 -show-encoding -mattr=+i8mm < %s 2>&1 | FileCheck %s
|
|
|
|
// No interesting edge cases for [US]MMLA, except for the fact that the data
|
|
// types are fixed (no 64-bit version), and USMMLA exists, but SUMMLA does not.
|
|
smmla v1.2s, v16.8b, v31.8b
|
|
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
|
|
summla v1.4s, v16.16b, v31.16b
|
|
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: unrecognized instruction mnemonic, did you mean: smmla, ummla, usmmla?
|
|
|
|
// USDOT (vector) has two valid data type combinations, others are rejected.
|
|
usdot v3.4s, v15.8b, v30.8b
|
|
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
|
|
usdot v3.2s, v15.16b, v30.16b
|
|
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
|
|
|
|
// For USDOT and SUDOT (indexed), the index is in range [0,3] (regardless of data types)
|
|
usdot v31.2s, v1.8b, v2.4b[4]
|
|
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 3].
|
|
usdot v31.4s, v1.16b, v2.4b[4]
|
|
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 3].
|
|
sudot v31.2s, v1.8b, v2.4b[4]
|
|
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 3].
|
|
sudot v31.4s, v1.16b, v2.4b[4]
|
|
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 3].
|
|
|
|
// The arrangement specifiers of the first two operands must match.
|
|
usdot v31.4s, v1.8b, v2.4b[0]
|
|
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
|
|
usdot v31.2s, v1.16b, v2.4b[0]
|
|
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
|
|
sudot v31.4s, v1.8b, v2.4b[0]
|
|
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
|
|
sudot v31.2s, v1.16b, v2.4b[0]
|
|
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
|