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: support WHILE instructions
Summary: Patch adds support for the following instructions: * WHILEGE, WHILEGT, WHILEHS, WHILEHI, WHILEWR, WHILERW The specification can be found here: https://developer.arm.com/docs/ddi0602/latest Reviewed By: chill Differential Revision: https://reviews.llvm.org/D62601 llvm-svn: 362215
- Loading branch information
Showing
14 changed files
with
543 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
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,29 @@ | ||
// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 2>&1 < %s| FileCheck %s | ||
|
||
|
||
// ------------------------------------------------------------------------- // | ||
// Invalid scalar registers | ||
|
||
whilege p15.b, xzr, sp | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction | ||
// CHECK-NEXT: whilege p15.b, xzr, sp | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
whilege p15.b, xzr, w0 | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction | ||
// CHECK-NEXT: whilege p15.b, xzr, w0 | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
whilege p15.b, w0, x0 | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction | ||
// CHECK-NEXT: whilege p15.b, w0, x0 | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
|
||
// ------------------------------------------------------------------------- // | ||
// Invalid predicate | ||
|
||
whilege p15, w0, w0 | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid predicate register. | ||
// CHECK-NEXT: whilege p15, w0, w0 | ||
// 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,68 @@ | ||
// 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 | ||
|
||
whilege p15.b, xzr, x0 | ||
// CHECK-INST: whilege p15.b, xzr, x0 | ||
// CHECK-ENCODING: [0xef,0x13,0x20,0x25] | ||
// CHECK-ERROR: instruction requires: sve2 | ||
// CHECK-UNKNOWN: ef 13 20 25 <unknown> | ||
|
||
whilege p15.b, x0, xzr | ||
// CHECK-INST: whilege p15.b, x0, xzr | ||
// CHECK-ENCODING: [0x0f,0x10,0x3f,0x25] | ||
// CHECK-ERROR: instruction requires: sve2 | ||
// CHECK-UNKNOWN: 0f 10 3f 25 <unknown> | ||
|
||
whilege p15.b, wzr, w0 | ||
// CHECK-INST: whilege p15.b, wzr, w0 | ||
// CHECK-ENCODING: [0xef,0x03,0x20,0x25] | ||
// CHECK-ERROR: instruction requires: sve2 | ||
// CHECK-UNKNOWN: ef 03 20 25 <unknown> | ||
|
||
whilege p15.b, w0, wzr | ||
// CHECK-INST: whilege p15.b, w0, wzr | ||
// CHECK-ENCODING: [0x0f,0x00,0x3f,0x25] | ||
// CHECK-ERROR: instruction requires: sve2 | ||
// CHECK-UNKNOWN: 0f 00 3f 25 <unknown> | ||
|
||
whilege p15.h, x0, xzr | ||
// CHECK-INST: whilege p15.h, x0, xzr | ||
// CHECK-ENCODING: [0x0f,0x10,0x7f,0x25] | ||
// CHECK-ERROR: instruction requires: sve2 | ||
// CHECK-UNKNOWN: 0f 10 7f 25 <unknown> | ||
|
||
whilege p15.h, w0, wzr | ||
// CHECK-INST: whilege p15.h, w0, wzr | ||
// CHECK-ENCODING: [0x0f,0x00,0x7f,0x25] | ||
// CHECK-ERROR: instruction requires: sve2 | ||
// CHECK-UNKNOWN: 0f 00 7f 25 <unknown> | ||
|
||
whilege p15.s, x0, xzr | ||
// CHECK-INST: whilege p15.s, x0, xzr | ||
// CHECK-ENCODING: [0x0f,0x10,0xbf,0x25] | ||
// CHECK-ERROR: instruction requires: sve2 | ||
// CHECK-UNKNOWN: 0f 10 bf 25 <unknown> | ||
|
||
whilege p15.s, w0, wzr | ||
// CHECK-INST: whilege p15.s, w0, wzr | ||
// CHECK-ENCODING: [0x0f,0x00,0xbf,0x25] | ||
// CHECK-ERROR: instruction requires: sve2 | ||
// CHECK-UNKNOWN: 0f 00 bf 25 <unknown> | ||
|
||
whilege p15.d, w0, wzr | ||
// CHECK-INST: whilege p15.d, w0, wzr | ||
// CHECK-ENCODING: [0x0f,0x00,0xff,0x25] | ||
// CHECK-ERROR: instruction requires: sve2 | ||
// CHECK-UNKNOWN: 0f 00 ff 25 <unknown> | ||
|
||
whilege p15.d, x0, xzr | ||
// CHECK-INST: whilege p15.d, x0, xzr | ||
// CHECK-ENCODING: [0x0f,0x10,0xff,0x25] | ||
// CHECK-ERROR: instruction requires: sve2 | ||
// CHECK-UNKNOWN: 0f 10 ff 25 <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,29 @@ | ||
// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 2>&1 < %s| FileCheck %s | ||
|
||
|
||
// ------------------------------------------------------------------------- // | ||
// Invalid scalar registers | ||
|
||
whilegt p15.b, xzr, sp | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction | ||
// CHECK-NEXT: whilegt p15.b, xzr, sp | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
whilegt p15.b, xzr, w0 | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction | ||
// CHECK-NEXT: whilegt p15.b, xzr, w0 | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
whilegt p15.b, w0, x0 | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction | ||
// CHECK-NEXT: whilegt p15.b, w0, x0 | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
|
||
// ------------------------------------------------------------------------- // | ||
// Invalid predicate | ||
|
||
whilegt p15, w0, w0 | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid predicate register. | ||
// CHECK-NEXT: whilegt p15, w0, w0 | ||
// 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,68 @@ | ||
// 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 | ||
|
||
whilegt p15.b, xzr, x0 | ||
// CHECK-INST: whilegt p15.b, xzr, x0 | ||
// CHECK-ENCODING: [0xff,0x13,0x20,0x25] | ||
// CHECK-ERROR: instruction requires: sve2 | ||
// CHECK-UNKNOWN: ff 13 20 25 <unknown> | ||
|
||
whilegt p15.b, x0, xzr | ||
// CHECK-INST: whilegt p15.b, x0, xzr | ||
// CHECK-ENCODING: [0x1f,0x10,0x3f,0x25] | ||
// CHECK-ERROR: instruction requires: sve2 | ||
// CHECK-UNKNOWN: 1f 10 3f 25 <unknown> | ||
|
||
whilegt p15.b, wzr, w0 | ||
// CHECK-INST: whilegt p15.b, wzr, w0 | ||
// CHECK-ENCODING: [0xff,0x03,0x20,0x25] | ||
// CHECK-ERROR: instruction requires: sve2 | ||
// CHECK-UNKNOWN: ff 03 20 25 <unknown> | ||
|
||
whilegt p15.b, w0, wzr | ||
// CHECK-INST: whilegt p15.b, w0, wzr | ||
// CHECK-ENCODING: [0x1f,0x00,0x3f,0x25] | ||
// CHECK-ERROR: instruction requires: sve2 | ||
// CHECK-UNKNOWN: 1f 00 3f 25 <unknown> | ||
|
||
whilegt p15.h, x0, xzr | ||
// CHECK-INST: whilegt p15.h, x0, xzr | ||
// CHECK-ENCODING: [0x1f,0x10,0x7f,0x25] | ||
// CHECK-ERROR: instruction requires: sve2 | ||
// CHECK-UNKNOWN: 1f 10 7f 25 <unknown> | ||
|
||
whilegt p15.h, w0, wzr | ||
// CHECK-INST: whilegt p15.h, w0, wzr | ||
// CHECK-ENCODING: [0x1f,0x00,0x7f,0x25] | ||
// CHECK-ERROR: instruction requires: sve2 | ||
// CHECK-UNKNOWN: 1f 00 7f 25 <unknown> | ||
|
||
whilegt p15.s, x0, xzr | ||
// CHECK-INST: whilegt p15.s, x0, xzr | ||
// CHECK-ENCODING: [0x1f,0x10,0xbf,0x25] | ||
// CHECK-ERROR: instruction requires: sve2 | ||
// CHECK-UNKNOWN: 1f 10 bf 25 <unknown> | ||
|
||
whilegt p15.s, w0, wzr | ||
// CHECK-INST: whilegt p15.s, w0, wzr | ||
// CHECK-ENCODING: [0x1f,0x00,0xbf,0x25] | ||
// CHECK-ERROR: instruction requires: sve2 | ||
// CHECK-UNKNOWN: 1f 00 bf 25 <unknown> | ||
|
||
whilegt p15.d, w0, wzr | ||
// CHECK-INST: whilegt p15.d, w0, wzr | ||
// CHECK-ENCODING: [0x1f,0x00,0xff,0x25] | ||
// CHECK-ERROR: instruction requires: sve2 | ||
// CHECK-UNKNOWN: 1f 00 ff 25 <unknown> | ||
|
||
whilegt p15.d, x0, xzr | ||
// CHECK-INST: whilegt p15.d, x0, xzr | ||
// CHECK-ENCODING: [0x1f,0x10,0xff,0x25] | ||
// CHECK-ERROR: instruction requires: sve2 | ||
// CHECK-UNKNOWN: 1f 10 ff 25 <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,29 @@ | ||
// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 2>&1 < %s| FileCheck %s | ||
|
||
|
||
// ------------------------------------------------------------------------- // | ||
// Invalid scalar registers | ||
|
||
whilehi p15.b, xzr, sp | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction | ||
// CHECK-NEXT: whilehi p15.b, xzr, sp | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
whilehi p15.b, xzr, w0 | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction | ||
// CHECK-NEXT: whilehi p15.b, xzr, w0 | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
whilehi p15.b, w0, x0 | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction | ||
// CHECK-NEXT: whilehi p15.b, w0, x0 | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
|
||
// ------------------------------------------------------------------------- // | ||
// Invalid predicate | ||
|
||
whilehi p15, w0, w0 | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid predicate register. | ||
// CHECK-NEXT: whilehi p15, w0, w0 | ||
// 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,68 @@ | ||
// 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 | ||
|
||
whilehi p15.b, xzr, x0 | ||
// CHECK-INST: whilehi p15.b, xzr, x0 | ||
// CHECK-ENCODING: [0xff,0x1b,0x20,0x25] | ||
// CHECK-ERROR: instruction requires: sve2 | ||
// CHECK-UNKNOWN: ff 1b 20 25 <unknown> | ||
|
||
whilehi p15.b, x0, xzr | ||
// CHECK-INST: whilehi p15.b, x0, xzr | ||
// CHECK-ENCODING: [0x1f,0x18,0x3f,0x25] | ||
// CHECK-ERROR: instruction requires: sve2 | ||
// CHECK-UNKNOWN: 1f 18 3f 25 <unknown> | ||
|
||
whilehi p15.b, wzr, w0 | ||
// CHECK-INST: whilehi p15.b, wzr, w0 | ||
// CHECK-ENCODING: [0xff,0x0b,0x20,0x25] | ||
// CHECK-ERROR: instruction requires: sve2 | ||
// CHECK-UNKNOWN: ff 0b 20 25 <unknown> | ||
|
||
whilehi p15.b, w0, wzr | ||
// CHECK-INST: whilehi p15.b, w0, wzr | ||
// CHECK-ENCODING: [0x1f,0x08,0x3f,0x25] | ||
// CHECK-ERROR: instruction requires: sve2 | ||
// CHECK-UNKNOWN: 1f 08 3f 25 <unknown> | ||
|
||
whilehi p15.h, x0, xzr | ||
// CHECK-INST: whilehi p15.h, x0, xzr | ||
// CHECK-ENCODING: [0x1f,0x18,0x7f,0x25] | ||
// CHECK-ERROR: instruction requires: sve2 | ||
// CHECK-UNKNOWN: 1f 18 7f 25 <unknown> | ||
|
||
whilehi p15.h, w0, wzr | ||
// CHECK-INST: whilehi p15.h, w0, wzr | ||
// CHECK-ENCODING: [0x1f,0x08,0x7f,0x25] | ||
// CHECK-ERROR: instruction requires: sve2 | ||
// CHECK-UNKNOWN: 1f 08 7f 25 <unknown> | ||
|
||
whilehi p15.s, x0, xzr | ||
// CHECK-INST: whilehi p15.s, x0, xzr | ||
// CHECK-ENCODING: [0x1f,0x18,0xbf,0x25] | ||
// CHECK-ERROR: instruction requires: sve2 | ||
// CHECK-UNKNOWN: 1f 18 bf 25 <unknown> | ||
|
||
whilehi p15.s, w0, wzr | ||
// CHECK-INST: whilehi p15.s, w0, wzr | ||
// CHECK-ENCODING: [0x1f,0x08,0xbf,0x25] | ||
// CHECK-ERROR: instruction requires: sve2 | ||
// CHECK-UNKNOWN: 1f 08 bf 25 <unknown> | ||
|
||
whilehi p15.d, w0, wzr | ||
// CHECK-INST: whilehi p15.d, w0, wzr | ||
// CHECK-ENCODING: [0x1f,0x08,0xff,0x25] | ||
// CHECK-ERROR: instruction requires: sve2 | ||
// CHECK-UNKNOWN: 1f 08 ff 25 <unknown> | ||
|
||
whilehi p15.d, x0, xzr | ||
// CHECK-INST: whilehi p15.d, x0, xzr | ||
// CHECK-ENCODING: [0x1f,0x18,0xff,0x25] | ||
// CHECK-ERROR: instruction requires: sve2 | ||
// CHECK-UNKNOWN: 1f 18 ff 25 <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,29 @@ | ||
// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 2>&1 < %s| FileCheck %s | ||
|
||
|
||
// ------------------------------------------------------------------------- // | ||
// Invalid scalar registers | ||
|
||
whilehs p15.b, xzr, sp | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction | ||
// CHECK-NEXT: whilehs p15.b, xzr, sp | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
whilehs p15.b, xzr, w0 | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction | ||
// CHECK-NEXT: whilehs p15.b, xzr, w0 | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
whilehs p15.b, w0, x0 | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction | ||
// CHECK-NEXT: whilehs p15.b, w0, x0 | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
|
||
// ------------------------------------------------------------------------- // | ||
// Invalid predicate | ||
|
||
whilehs p15, w0, w0 | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid predicate register. | ||
// CHECK-NEXT: whilehs p15, w0, w0 | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: |
Oops, something went wrong.