forked from llvm/llvm-project
-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[AARCH64] Add assembly/disassmbly for FIRST,LASTP instr. (llvm#114049)
This patch adds assembly/disassembly and tests for new FIRSTP and LASTP instructions introduced in https://developer.arm.com/documentation/ddi0602/2024-09 --------- Co-authored-by: SpencerAbson <Spencer.Abson@arm.com>
- Loading branch information
1 parent
85f3d5c
commit 15f63ec
Showing
6 changed files
with
252 additions
and
5 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,32 @@ | ||
// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2p2 2>&1 < %s| FileCheck %s | ||
|
||
// ------------------------------------------------------------------------- // | ||
// Invalid predicate operand | ||
|
||
firstp x0, p15, p0 | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid predicate register. | ||
// CHECK-NEXT: firstp x0, p15, p0 | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
firstp x0, p15.b, p0.b | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid predicate register. | ||
// CHECK-NEXT: firstp x0, p15.b, p0.b | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
firstp x0, p15.q, p0.h | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid predicate register. | ||
// CHECK-NEXT: firstp x0, p15.q, p0.h | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
// ------------------------------------------------------------------------- // | ||
// Invalid register types | ||
|
||
firstp sp, p15, p0.h | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction | ||
// CHECK-NEXT: firstp sp, p15, p0.h | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
firstp w0, p15, p0.h | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction | ||
// CHECK-NEXT: firstp w0, p15, p0.h | ||
// 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,87 @@ | ||
// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2p2 < %s \ | ||
// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST | ||
// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sme2p2 < %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=+sve2p2 < %s \ | ||
// RUN: | llvm-objdump -d --mattr=+sve2p2 - | FileCheck %s --check-prefix=CHECK-INST | ||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2p2 < %s \ | ||
// RUN: | llvm-objdump -d --mattr=-sme2 - | FileCheck %s --check-prefix=CHECK-UNKNOWN | ||
// Disassemble encoding and check the re-encoding (-show-encoding) matches. | ||
// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2p2 < %s \ | ||
// RUN: | sed '/.text/d' | sed 's/.*encoding: //g' \ | ||
// RUN: | llvm-mc -triple=aarch64 -mattr=+sve2p2 -disassemble -show-encoding \ | ||
// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST | ||
|
||
firstp x0, p0, p0.b // 00100101-00100001-10000000-00000000 | ||
// CHECK-INST: firstp x0, p0, p0.b | ||
// CHECK-ENCODING: [0x00,0x80,0x21,0x25] | ||
// CHECK-ERROR: instruction requires: sme2p2 or sve2p2 | ||
// CHECK-UNKNOWN: 25218000 <unknown> | ||
|
||
firstp x23, p11, p13.b // 00100101-00100001-10101101-10110111 | ||
// CHECK-INST: firstp x23, p11, p13.b | ||
// CHECK-ENCODING: [0xb7,0xad,0x21,0x25] | ||
// CHECK-ERROR: instruction requires: sme2p2 or sve2p2 | ||
// CHECK-UNKNOWN: 2521adb7 <unknown> | ||
|
||
firstp xzr, p15, p15.b // 00100101-00100001-10111101-11111111 | ||
// CHECK-INST: firstp xzr, p15, p15.b | ||
// CHECK-ENCODING: [0xff,0xbd,0x21,0x25] | ||
// CHECK-ERROR: instruction requires: sme2p2 or sve2p2 | ||
// CHECK-UNKNOWN: 2521bdff <unknown> | ||
|
||
firstp x0, p0, p0.h // 00100101-01100001-10000000-00000000 | ||
// CHECK-INST: firstp x0, p0, p0.h | ||
// CHECK-ENCODING: [0x00,0x80,0x61,0x25] | ||
// CHECK-ERROR: instruction requires: sme2p2 or sve2p2 | ||
// CHECK-UNKNOWN: 25618000 <unknown> | ||
|
||
firstp x23, p11, p13.h // 00100101-01100001-10101101-10110111 | ||
// CHECK-INST: firstp x23, p11, p13.h | ||
// CHECK-ENCODING: [0xb7,0xad,0x61,0x25] | ||
// CHECK-ERROR: instruction requires: sme2p2 or sve2p2 | ||
// CHECK-UNKNOWN: 2561adb7 <unknown> | ||
|
||
firstp xzr, p15, p15.h // 00100101-01100001-10111101-11111111 | ||
// CHECK-INST: firstp xzr, p15, p15.h | ||
// CHECK-ENCODING: [0xff,0xbd,0x61,0x25] | ||
// CHECK-ERROR: instruction requires: sme2p2 or sve2p2 | ||
// CHECK-UNKNOWN: 2561bdff <unknown> | ||
|
||
firstp x0, p0, p0.s // 00100101-10100001-10000000-00000000 | ||
// CHECK-INST: firstp x0, p0, p0.s | ||
// CHECK-ENCODING: [0x00,0x80,0xa1,0x25] | ||
// CHECK-ERROR: instruction requires: sme2p2 or sve2p2 | ||
// CHECK-UNKNOWN: 25a18000 <unknown> | ||
|
||
firstp x23, p11, p13.s // 00100101-10100001-10101101-10110111 | ||
// CHECK-INST: firstp x23, p11, p13.s | ||
// CHECK-ENCODING: [0xb7,0xad,0xa1,0x25] | ||
// CHECK-ERROR: instruction requires: sme2p2 or sve2p2 | ||
// CHECK-UNKNOWN: 25a1adb7 <unknown> | ||
|
||
firstp xzr, p15, p15.s // 00100101-10100001-10111101-11111111 | ||
// CHECK-INST: firstp xzr, p15, p15.s | ||
// CHECK-ENCODING: [0xff,0xbd,0xa1,0x25] | ||
// CHECK-ERROR: instruction requires: sme2p2 or sve2p2 | ||
// CHECK-UNKNOWN: 25a1bdff <unknown> | ||
|
||
firstp x0, p0, p0.d // 00100101-11100001-10000000-00000000 | ||
// CHECK-INST: firstp x0, p0, p0.d | ||
// CHECK-ENCODING: [0x00,0x80,0xe1,0x25] | ||
// CHECK-ERROR: instruction requires: sme2p2 or sve2p2 | ||
// CHECK-UNKNOWN: 25e18000 <unknown> | ||
|
||
firstp x23, p11, p13.d // 00100101-11100001-10101101-10110111 | ||
// CHECK-INST: firstp x23, p11, p13.d | ||
// CHECK-ENCODING: [0xb7,0xad,0xe1,0x25] | ||
// CHECK-ERROR: instruction requires: sme2p2 or sve2p2 | ||
// CHECK-UNKNOWN: 25e1adb7 <unknown> | ||
|
||
firstp xzr, p15, p15.d // 00100101-11100001-10111101-11111111 | ||
// CHECK-INST: firstp xzr, p15, p15.d | ||
// CHECK-ENCODING: [0xff,0xbd,0xe1,0x25] | ||
// CHECK-ERROR: instruction requires: sme2p2 or sve2p2 | ||
// CHECK-UNKNOWN: 25e1bdff <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,32 @@ | ||
// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2p2 2>&1 < %s| FileCheck %s | ||
|
||
// ------------------------------------------------------------------------- // | ||
// Invalid predicate operand | ||
|
||
lastp x0, p15, p0 | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid predicate register. | ||
// CHECK-NEXT: lastp x0, p15, p0 | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
lastp x0, p15.b, p0.b | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid predicate register. | ||
// CHECK-NEXT: lastp x0, p15.b, p0.b | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
lastp x0, p15.q, p0.h | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid predicate register. | ||
// CHECK-NEXT: lastp x0, p15.q, p0.h | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
// ------------------------------------------------------------------------- // | ||
// Invalid register types | ||
|
||
lastp sp, p15, p0.h | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction | ||
// CHECK-NEXT: lastp sp, p15, p0.h | ||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: | ||
|
||
lastp w0, p15, p0.h | ||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction | ||
// CHECK-NEXT: lastp w0, p15, p0.h | ||
// 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,87 @@ | ||
// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2p2 < %s \ | ||
// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST | ||
// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sme2p2 < %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=+sve2p2 < %s \ | ||
// RUN: | llvm-objdump -d --mattr=+sve2p2 - | FileCheck %s --check-prefix=CHECK-INST | ||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2p2 < %s \ | ||
// RUN: | llvm-objdump -d --mattr=-sme2 - | FileCheck %s --check-prefix=CHECK-UNKNOWN | ||
// Disassemble encoding and check the re-encoding (-show-encoding) matches. | ||
// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2p2 < %s \ | ||
// RUN: | sed '/.text/d' | sed 's/.*encoding: //g' \ | ||
// RUN: | llvm-mc -triple=aarch64 -mattr=+sve2p2 -disassemble -show-encoding \ | ||
// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST | ||
|
||
lastp x0, p0, p0.b // 00100101-00100010-10000000-00000000 | ||
// CHECK-INST: lastp x0, p0, p0.b | ||
// CHECK-ENCODING: [0x00,0x80,0x22,0x25] | ||
// CHECK-ERROR: instruction requires: sme2p2 or sve2p2 | ||
// CHECK-UNKNOWN: 25228000 <unknown> | ||
|
||
lastp x23, p11, p13.b // 00100101-00100010-10101101-10110111 | ||
// CHECK-INST: lastp x23, p11, p13.b | ||
// CHECK-ENCODING: [0xb7,0xad,0x22,0x25] | ||
// CHECK-ERROR: instruction requires: sme2p2 or sve2p2 | ||
// CHECK-UNKNOWN: 2522adb7 <unknown> | ||
|
||
lastp xzr, p15, p15.b // 00100101-00100010-10111101-11111111 | ||
// CHECK-INST: lastp xzr, p15, p15.b | ||
// CHECK-ENCODING: [0xff,0xbd,0x22,0x25] | ||
// CHECK-ERROR: instruction requires: sme2p2 or sve2p2 | ||
// CHECK-UNKNOWN: 2522bdff <unknown> | ||
|
||
lastp x0, p0, p0.h // 00100101-01100010-10000000-00000000 | ||
// CHECK-INST: lastp x0, p0, p0.h | ||
// CHECK-ENCODING: [0x00,0x80,0x62,0x25] | ||
// CHECK-ERROR: instruction requires: sme2p2 or sve2p2 | ||
// CHECK-UNKNOWN: 25628000 <unknown> | ||
|
||
lastp x23, p11, p13.h // 00100101-01100010-10101101-10110111 | ||
// CHECK-INST: lastp x23, p11, p13.h | ||
// CHECK-ENCODING: [0xb7,0xad,0x62,0x25] | ||
// CHECK-ERROR: instruction requires: sme2p2 or sve2p2 | ||
// CHECK-UNKNOWN: 2562adb7 <unknown> | ||
|
||
lastp xzr, p15, p15.h // 00100101-01100010-10111101-11111111 | ||
// CHECK-INST: lastp xzr, p15, p15.h | ||
// CHECK-ENCODING: [0xff,0xbd,0x62,0x25] | ||
// CHECK-ERROR: instruction requires: sme2p2 or sve2p2 | ||
// CHECK-UNKNOWN: 2562bdff <unknown> | ||
|
||
lastp x0, p0, p0.s // 00100101-10100010-10000000-00000000 | ||
// CHECK-INST: lastp x0, p0, p0.s | ||
// CHECK-ENCODING: [0x00,0x80,0xa2,0x25] | ||
// CHECK-ERROR: instruction requires: sme2p2 or sve2p2 | ||
// CHECK-UNKNOWN: 25a28000 <unknown> | ||
|
||
lastp x23, p11, p13.s // 00100101-10100010-10101101-10110111 | ||
// CHECK-INST: lastp x23, p11, p13.s | ||
// CHECK-ENCODING: [0xb7,0xad,0xa2,0x25] | ||
// CHECK-ERROR: instruction requires: sme2p2 or sve2p2 | ||
// CHECK-UNKNOWN: 25a2adb7 <unknown> | ||
|
||
lastp xzr, p15, p15.s // 00100101-10100010-10111101-11111111 | ||
// CHECK-INST: lastp xzr, p15, p15.s | ||
// CHECK-ENCODING: [0xff,0xbd,0xa2,0x25] | ||
// CHECK-ERROR: instruction requires: sme2p2 or sve2p2 | ||
// CHECK-UNKNOWN: 25a2bdff <unknown> | ||
|
||
lastp x0, p0, p0.d // 00100101-11100010-10000000-00000000 | ||
// CHECK-INST: lastp x0, p0, p0.d | ||
// CHECK-ENCODING: [0x00,0x80,0xe2,0x25] | ||
// CHECK-ERROR: instruction requires: sme2p2 or sve2p2 | ||
// CHECK-UNKNOWN: 25e28000 <unknown> | ||
|
||
lastp x23, p11, p13.d // 00100101-11100010-10101101-10110111 | ||
// CHECK-INST: lastp x23, p11, p13.d | ||
// CHECK-ENCODING: [0xb7,0xad,0xe2,0x25] | ||
// CHECK-ERROR: instruction requires: sme2p2 or sve2p2 | ||
// CHECK-UNKNOWN: 25e2adb7 <unknown> | ||
|
||
lastp xzr, p15, p15.d // 00100101-11100010-10111101-11111111 | ||
// CHECK-INST: lastp xzr, p15, p15.d | ||
// CHECK-ENCODING: [0xff,0xbd,0xe2,0x25] | ||
// CHECK-ERROR: instruction requires: sme2p2 or sve2p2 | ||
// CHECK-UNKNOWN: 25e2bdff <unknown> |