aboutsummaryrefslogtreecommitdiff
path: root/opcodes
diff options
context:
space:
mode:
authorJan Beulich <jbeulich@suse.com>2024-05-17 10:52:53 +0200
committerJan Beulich <jbeulich@suse.com>2024-05-17 10:52:53 +0200
commit44fc9616c2e74396395f60c9a601317e4c4c4733 (patch)
tree1b39bd961995e2c63137db1e5f893a554adb8332 /opcodes
parent132a0b0d77fe11db4b03182d3317ae204491a6a9 (diff)
downloadbinutils-44fc9616c2e74396395f60c9a601317e4c4c4733.zip
binutils-44fc9616c2e74396395f60c9a601317e4c4c4733.tar.gz
binutils-44fc9616c2e74396395f60c9a601317e4c4c4733.tar.bz2
aarch64: correct SVE2.1 ld2q (scalar plus scalar)
It's opcode was wrong, as was e.g. easily visible from the inappropriate testcase expectation.
Diffstat (limited to 'opcodes')
-rw-r--r--opcodes/aarch64-dis-2.c31
-rw-r--r--opcodes/aarch64-tbl.h2
2 files changed, 21 insertions, 12 deletions
diff --git a/opcodes/aarch64-dis-2.c b/opcodes/aarch64-dis-2.c
index 46f4e2f..36fd047 100644
--- a/opcodes/aarch64-dis-2.c
+++ b/opcodes/aarch64-dis-2.c
@@ -16985,21 +16985,32 @@ aarch64_opcode_lookup_1 (uint32_t word)
{
if (((word >> 14) & 0x1) == 0)
{
- if (((word >> 23) & 0x1) == 0)
+ if (((word >> 15) & 0x1) == 0)
{
- /* 33222222222211111111110000000000
- 10987654321098765432109876543210
- 101001x00x1xxxxxx00xxxxxxxxxxxxx
- ld1rob. */
- return 3044;
+ if (((word >> 23) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ 101001x00x1xxxxx000xxxxxxxxxxxxx
+ ld1rob. */
+ return 3044;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ 101001x01x1xxxxx000xxxxxxxxxxxxx
+ ld1roh. */
+ return 3045;
+ }
}
else
{
/* 33222222222211111111110000000000
10987654321098765432109876543210
- 101001x01x1xxxxxx00xxxxxxxxxxxxx
- ld1roh. */
- return 3045;
+ 101001x0xx1xxxxx100xxxxxxxxxxxxx
+ ld2q. */
+ return 3323;
}
}
else
@@ -32880,8 +32891,6 @@ aarch64_find_next_opcode (const aarch64_opcode *opcode)
case 1696: return NULL; /* ldff1b --> NULL. */
case 1714: value = 1715; break; /* ldff1h --> ldff1h. */
case 1715: return NULL; /* ldff1h --> NULL. */
- case 1669: value = 3323; break; /* ld2h --> ld2q. */
- case 3323: return NULL; /* ld2q --> NULL. */
case 2474: value = 3291; break; /* fclamp --> bfclamp. */
case 3291: return NULL; /* bfclamp --> NULL. */
case 1788: value = 1789; break; /* ldr --> ldr. */
diff --git a/opcodes/aarch64-tbl.h b/opcodes/aarch64-tbl.h
index 5cd5172..063343d 100644
--- a/opcodes/aarch64-tbl.h
+++ b/opcodes/aarch64-tbl.h
@@ -6484,7 +6484,7 @@ const struct aarch64_opcode aarch64_opcode_table[] =
SVE2p1_INSNC("ld2q",0xa490e000, 0xfff0e000, sve_misc, 0, OP3 (SME_Zt2, SVE_Pg3, SVE_ADDR_RI_S4x2xVL), OP_SVE_QZU, 0, C_SCAN_MOVPRFX, 0),
SVE2p1_INSNC("ld3q",0xa510e000, 0xfff0e000, sve_misc, 0, OP3 (SME_Zt3, SVE_Pg3, SVE_ADDR_RI_S4x3xVL), OP_SVE_QZU, 0, C_SCAN_MOVPRFX, 0),
SVE2p1_INSNC("ld4q",0xa590e000, 0xfff0e000, sve_misc, 0, OP3 (SME_Zt4, SVE_Pg3, SVE_ADDR_RI_S4x4xVL), OP_SVE_QZU, 0, C_SCAN_MOVPRFX, 0),
- SVE2p1_INSNC("ld2q",0xa4a0e000, 0xffe0e000, sve_misc, 0, OP3 (SME_Zt2, SVE_Pg3, SVE_ADDR_RR_LSL4), OP_SVE_QZU, 0, C_SCAN_MOVPRFX, 0),
+ SVE2p1_INSNC("ld2q",0xa4a08000, 0xffe0e000, sve_misc, 0, OP3 (SME_Zt2, SVE_Pg3, SVE_ADDR_RR_LSL4), OP_SVE_QZU, 0, C_SCAN_MOVPRFX, 0),
SVE2p1_INSNC("ld3q",0xa5208000, 0xffe0e000, sve_misc, 0, OP3 (SME_Zt3, SVE_Pg3, SVE_ADDR_RR_LSL4), OP_SVE_QZU, 0, C_SCAN_MOVPRFX, 0),
SVE2p1_INSNC("ld4q",0xa5a08000, 0xffe0e000, sve_misc, 0, OP3 (SME_Zt4, SVE_Pg3, SVE_ADDR_RR_LSL4), OP_SVE_QZU, 0, C_SCAN_MOVPRFX, 0),