Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[AArch64][SVE2] Asm: add saturating multiply-add long instructions
Summary: Patch adds support for indexed and unpredicated vectors forms of the following instructions: * SQDMLALB, SQDMLALT, SQDMLSLB, SQDMLSLT The specification can be found here: https://developer.arm.com/docs/ddi0602/latest Reviewed By: SjoerdMeijer Differential Revision: https://reviews.llvm.org/D61997 llvm-svn: 361005
- Loading branch information
Showing
9 changed files
with
744 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,116 @@ | ||
// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 2>&1 < %s| FileCheck %s | ||
|
||
|
||
// ------------------------------------------------------------------------- // | ||
// z register out of range for index | ||
|
||
sqdmlalb z0.s, z1.h, z8.h[0] | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction | ||
// CHECK-NEXT: sqdmlalb z0.s, z1.h, z8.h[0] | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
sqdmlalb z0.d, z1.s, z16.s[0] | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction | ||
// CHECK-NEXT: sqdmlalb z0.d, z1.s, z16.s[0] | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
// ------------------------------------------------------------------------- // | ||
// Index out of bounds | ||
|
||
sqdmlalb z0.s, z1.h, z7.h[-1] | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 7]. | ||
// CHECK-NEXT: sqdmlalb z0.s, z1.h, z7.h[-1] | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
sqdmlalb z0.s, z1.h, z7.h[8] | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 7]. | ||
// CHECK-NEXT: sqdmlalb z0.s, z1.h, z7.h[8] | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
sqdmlalb z0.d, z1.s, z15.s[-1] | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 3]. | ||
// CHECK-NEXT: sqdmlalb z0.d, z1.s, z15.s[-1] | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
sqdmlalb z0.d, z1.s, z15.s[4] | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 3]. | ||
// CHECK-NEXT: sqdmlalb z0.d, z1.s, z15.s[4] | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
// ------------------------------------------------------------------------- // | ||
// Invalid element width | ||
|
||
sqdmlalb z0.b, z1.b, z2.b | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width | ||
// CHECK-NEXT: sqdmlalb z0.b, z1.b, z2.b | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
sqdmlalb z0.h, z1.h, z2.h | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width | ||
// CHECK-NEXT: sqdmlalb z0.h, z1.h, z2.h | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
sqdmlalb z0.s, z1.s, z2.s | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width | ||
// CHECK-NEXT: sqdmlalb z0.s, z1.s, z2.s | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
sqdmlalb z0.d, z1.d, z2.d | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width | ||
// CHECK-NEXT: sqdmlalb z0.d, z1.d, z2.d | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
sqdmlalb z0.b, z1.b, z2.b[0] | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width | ||
// CHECK-NEXT: sqdmlalb z0.b, z1.b, z2.b[0] | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
sqdmlalb z0.h, z1.h, z2.h[0] | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width | ||
// CHECK-NEXT: sqdmlalb z0.h, z1.h, z2.h[0] | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
sqdmlalb z0.s, z1.b, z2.b[0] | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width | ||
// CHECK-NEXT: sqdmlalb z0.s, z1.b, z2.b[0] | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
sqdmlalb z0.s, z1.s, z2.s[0] | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width | ||
// CHECK-NEXT: sqdmlalb z0.s, z1.s, z2.s[0] | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
sqdmlalb z0.s, z1.d, z2.d[0] | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width | ||
// CHECK-NEXT: sqdmlalb z0.s, z1.d, z2.d[0] | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
sqdmlalb z0.d, z1.b, z2.b[0] | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width | ||
// CHECK-NEXT: sqdmlalb z0.d, z1.b, z2.b[0] | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
sqdmlalb z0.d, z1.h, z2.h[0] | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width | ||
// CHECK-NEXT: sqdmlalb z0.d, z1.h, z2.h[0] | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
sqdmlalb z0.d, z1.d, z2.d[0] | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width | ||
// CHECK-NEXT: sqdmlalb z0.d, z1.d, z2.d[0] | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
// --------------------------------------------------------------------------// | ||
// Negative tests for instructions that are incompatible with movprfx | ||
|
||
movprfx z0.d, p0/z, z7.d | ||
sqdmlalb z0.d, z1.s, z15.s | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a predicated movprfx, suggest using unpredicated movprfx | ||
// CHECK-NEXT: sqdmlalb z0.d, z1.s, z15.s | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
movprfx z0.d, p0/z, z7.d | ||
sqdmlalb z0.d, z1.s, z15.s[0] | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a predicated movprfx, suggest using unpredicated movprfx | ||
// CHECK-NEXT: sqdmlalb z0.d, z1.s, z15.s[0] | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 < %s \ | ||
// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST | ||
// RUN: not llvm-mc -triple=aarch64 -show-encoding < %s 2>&1 \ | ||
// RUN: | FileCheck %s --check-prefix=CHECK-ERROR | ||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \ | ||
// RUN: | llvm-objdump -d -mattr=+sve2 - | FileCheck %s --check-prefix=CHECK-INST | ||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \ | ||
// RUN: | llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-UNKNOWN | ||
|
||
|
||
sqdmlalb z0.h, z1.b, z31.b | ||
// CHECK-INST: sqdmlalb z0.h, z1.b, z31.b | ||
// CHECK-ENCODING: [0x20,0x60,0x5f,0x44] | ||
// CHECK-ERROR: instruction requires: sve2 | ||
// CHECK-UNKNOWN: 20 60 5f 44 <unknown> | ||
|
||
sqdmlalb z0.s, z1.h, z31.h | ||
// CHECK-INST: sqdmlalb z0.s, z1.h, z31.h | ||
// CHECK-ENCODING: [0x20,0x60,0x9f,0x44] | ||
// CHECK-ERROR: instruction requires: sve2 | ||
// CHECK-UNKNOWN: 20 60 9f 44 <unknown> | ||
|
||
sqdmlalb z0.d, z1.s, z31.s | ||
// CHECK-INST: sqdmlalb z0.d, z1.s, z31.s | ||
// CHECK-ENCODING: [0x20,0x60,0xdf,0x44] | ||
// CHECK-ERROR: instruction requires: sve2 | ||
// CHECK-UNKNOWN: 20 60 df 44 <unknown> | ||
|
||
sqdmlalb z0.s, z1.h, z7.h[7] | ||
// CHECK-INST: sqdmlalb z0.s, z1.h, z7.h[7] | ||
// CHECK-ENCODING: [0x20,0x28,0xbf,0x44] | ||
// CHECK-ERROR: instruction requires: sve2 | ||
// CHECK-UNKNOWN: 20 28 bf 44 <unknown> | ||
|
||
sqdmlalb z0.d, z1.s, z15.s[3] | ||
// CHECK-INST: sqdmlalb z0.d, z1.s, z15.s[3] | ||
// CHECK-ENCODING: [0x20,0x28,0xff,0x44] | ||
// CHECK-ERROR: instruction requires: sve2 | ||
// CHECK-UNKNOWN: 20 28 ff 44 <unknown> | ||
|
||
|
||
// --------------------------------------------------------------------------// | ||
// Test compatibility with MOVPRFX instruction. | ||
|
||
movprfx z21, z28 | ||
// CHECK-INST: movprfx z21, z28 | ||
// CHECK-ENCODING: [0x95,0xbf,0x20,0x04] | ||
// CHECK-ERROR: instruction requires: sve | ||
// CHECK-UNKNOWN: 95 bf 20 04 <unknown> | ||
|
||
sqdmlalb z21.d, z1.s, z31.s | ||
// CHECK-INST: sqdmlalb z21.d, z1.s, z31.s | ||
// CHECK-ENCODING: [0x35,0x60,0xdf,0x44] | ||
// CHECK-ERROR: instruction requires: sve2 | ||
// CHECK-UNKNOWN: 35 60 df 44 <unknown> | ||
|
||
movprfx z21, z28 | ||
// CHECK-INST: movprfx z21, z28 | ||
// CHECK-ENCODING: [0x95,0xbf,0x20,0x04] | ||
// CHECK-ERROR: instruction requires: sve | ||
// CHECK-UNKNOWN: 95 bf 20 04 <unknown> | ||
|
||
sqdmlalb z21.d, z10.s, z5.s[1] | ||
// CHECK-INST: sqdmlalb z21.d, z10.s, z5.s[1] | ||
// CHECK-ENCODING: [0x55,0x29,0xe5,0x44] | ||
// CHECK-ERROR: instruction requires: sve2 | ||
// CHECK-UNKNOWN: 55 29 e5 44 <unknown> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,116 @@ | ||
// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 2>&1 < %s| FileCheck %s | ||
|
||
|
||
// ------------------------------------------------------------------------- // | ||
// z register out of range for index | ||
|
||
sqdmlalt z0.s, z1.h, z8.h[0] | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction | ||
// CHECK-NEXT: sqdmlalt z0.s, z1.h, z8.h[0] | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
sqdmlalt z0.d, z1.s, z16.s[0] | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction | ||
// CHECK-NEXT: sqdmlalt z0.d, z1.s, z16.s[0] | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
// ------------------------------------------------------------------------- // | ||
// Index out of bounds | ||
|
||
sqdmlalt z0.s, z1.h, z7.h[-1] | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 7]. | ||
// CHECK-NEXT: sqdmlalt z0.s, z1.h, z7.h[-1] | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
sqdmlalt z0.s, z1.h, z7.h[8] | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 7]. | ||
// CHECK-NEXT: sqdmlalt z0.s, z1.h, z7.h[8] | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
sqdmlalt z0.d, z1.s, z15.s[-1] | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 3]. | ||
// CHECK-NEXT: sqdmlalt z0.d, z1.s, z15.s[-1] | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
sqdmlalt z0.d, z1.s, z15.s[4] | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 3]. | ||
// CHECK-NEXT: sqdmlalt z0.d, z1.s, z15.s[4] | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
// ------------------------------------------------------------------------- // | ||
// Invalid element width | ||
|
||
sqdmlalt z0.b, z1.b, z2.b | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width | ||
// CHECK-NEXT: sqdmlalt z0.b, z1.b, z2.b | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
sqdmlalt z0.h, z1.h, z2.h | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width | ||
// CHECK-NEXT: sqdmlalt z0.h, z1.h, z2.h | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
sqdmlalt z0.s, z1.s, z2.s | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width | ||
// CHECK-NEXT: sqdmlalt z0.s, z1.s, z2.s | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
sqdmlalt z0.d, z1.d, z2.d | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width | ||
// CHECK-NEXT: sqdmlalt z0.d, z1.d, z2.d | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
sqdmlalt z0.b, z1.b, z2.b[0] | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width | ||
// CHECK-NEXT: sqdmlalt z0.b, z1.b, z2.b[0] | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
sqdmlalt z0.h, z1.h, z2.h[0] | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width | ||
// CHECK-NEXT: sqdmlalt z0.h, z1.h, z2.h[0] | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
sqdmlalt z0.s, z1.b, z2.b[0] | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width | ||
// CHECK-NEXT: sqdmlalt z0.s, z1.b, z2.b[0] | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
sqdmlalt z0.s, z1.s, z2.s[0] | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width | ||
// CHECK-NEXT: sqdmlalt z0.s, z1.s, z2.s[0] | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
sqdmlalt z0.s, z1.d, z2.d[0] | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width | ||
// CHECK-NEXT: sqdmlalt z0.s, z1.d, z2.d[0] | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
sqdmlalt z0.d, z1.b, z2.b[0] | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width | ||
// CHECK-NEXT: sqdmlalt z0.d, z1.b, z2.b[0] | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
sqdmlalt z0.d, z1.h, z2.h[0] | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width | ||
// CHECK-NEXT: sqdmlalt z0.d, z1.h, z2.h[0] | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
sqdmlalt z0.d, z1.d, z2.d[0] | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width | ||
// CHECK-NEXT: sqdmlalt z0.d, z1.d, z2.d[0] | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
// --------------------------------------------------------------------------// | ||
// Negative tests for instructions that are incompatible with movprfx | ||
|
||
movprfx z0.d, p0/z, z7.d | ||
sqdmlalt z0.d, z1.s, z15.s | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a predicated movprfx, suggest using unpredicated movprfx | ||
// CHECK-NEXT: sqdmlalt z0.d, z1.s, z15.s | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
movprfx z0.d, p0/z, z7.d | ||
sqdmlalt z0.d, z1.s, z15.s[0] | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a predicated movprfx, suggest using unpredicated movprfx | ||
// CHECK-NEXT: sqdmlalt z0.d, z1.s, z15.s[0] | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 < %s \ | ||
// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST | ||
// RUN: not llvm-mc -triple=aarch64 -show-encoding < %s 2>&1 \ | ||
// RUN: | FileCheck %s --check-prefix=CHECK-ERROR | ||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \ | ||
// RUN: | llvm-objdump -d -mattr=+sve2 - | FileCheck %s --check-prefix=CHECK-INST | ||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \ | ||
// RUN: | llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-UNKNOWN | ||
|
||
|
||
sqdmlalt z0.h, z1.b, z31.b | ||
// CHECK-INST: sqdmlalt z0.h, z1.b, z31.b | ||
// CHECK-ENCODING: [0x20,0x64,0x5f,0x44] | ||
// CHECK-ERROR: instruction requires: sve2 | ||
// CHECK-UNKNOWN: 20 64 5f 44 <unknown> | ||
|
||
sqdmlalt z0.s, z1.h, z31.h | ||
// CHECK-INST: sqdmlalt z0.s, z1.h, z31.h | ||
// CHECK-ENCODING: [0x20,0x64,0x9f,0x44] | ||
// CHECK-ERROR: instruction requires: sve2 | ||
// CHECK-UNKNOWN: 20 64 9f 44 <unknown> | ||
|
||
sqdmlalt z0.d, z1.s, z31.s | ||
// CHECK-INST: sqdmlalt z0.d, z1.s, z31.s | ||
// CHECK-ENCODING: [0x20,0x64,0xdf,0x44] | ||
// CHECK-ERROR: instruction requires: sve2 | ||
// CHECK-UNKNOWN: 20 64 df 44 <unknown> | ||
|
||
sqdmlalt z0.s, z1.h, z7.h[7] | ||
// CHECK-INST: sqdmlalt z0.s, z1.h, z7.h[7] | ||
// CHECK-ENCODING: [0x20,0x2c,0xbf,0x44] | ||
// CHECK-ERROR: instruction requires: sve2 | ||
// CHECK-UNKNOWN: 20 2c bf 44 <unknown> | ||
|
||
sqdmlalt z0.d, z1.s, z15.s[3] | ||
// CHECK-INST: sqdmlalt z0.d, z1.s, z15.s[3] | ||
// CHECK-ENCODING: [0x20,0x2c,0xff,0x44] | ||
// CHECK-ERROR: instruction requires: sve2 | ||
// CHECK-UNKNOWN: 20 2c ff 44 <unknown> | ||
|
||
|
||
// --------------------------------------------------------------------------// | ||
// Test compatibility with MOVPRFX instruction. | ||
|
||
movprfx z21, z28 | ||
// CHECK-INST: movprfx z21, z28 | ||
// CHECK-ENCODING: [0x95,0xbf,0x20,0x04] | ||
// CHECK-ERROR: instruction requires: sve | ||
// CHECK-UNKNOWN: 95 bf 20 04 <unknown> | ||
|
||
sqdmlalt z21.d, z1.s, z31.s | ||
// CHECK-INST: sqdmlalt z21.d, z1.s, z31.s | ||
// CHECK-ENCODING: [0x35,0x64,0xdf,0x44] | ||
// CHECK-ERROR: instruction requires: sve2 | ||
// CHECK-UNKNOWN: 35 64 df 44 <unknown> | ||
|
||
movprfx z21, z28 | ||
// CHECK-INST: movprfx z21, z28 | ||
// CHECK-ENCODING: [0x95,0xbf,0x20,0x04] | ||
// CHECK-ERROR: instruction requires: sve | ||
// CHECK-UNKNOWN: 95 bf 20 04 <unknown> | ||
|
||
sqdmlalt z21.d, z10.s, z5.s[1] | ||
// CHECK-INST: sqdmlalt z21.d, z10.s, z5.s[1] | ||
// CHECK-ENCODING: [0x55,0x2d,0xe5,0x44] | ||
// CHECK-ERROR: instruction requires: sve2 | ||
// CHECK-UNKNOWN: 55 2d e5 44 <unknown> |
Oops, something went wrong.