From 2da3319873b794c0cef97ae2db2db96d016cccf5 Mon Sep 17 00:00:00 2001 From: Srinath Parvathaneni Date: Mon, 8 Jul 2024 17:44:26 +0100 Subject: aarch64: Add support for sve2p1 uzpq[1-2] instructions. This patch adds support for SVE2p1 "uzpq1" and "uzpq2" instructions, spec is available here [1] [1]: https://developer.arm.com/documentation/ddi0602/2024-03/SVE-Instructions?lang=en --- gas/testsuite/gas/aarch64/sve2p1-6-invalid.d | 2 +- gas/testsuite/gas/aarch64/sve2p1-6-invalid.l | 24 ++ gas/testsuite/gas/aarch64/sve2p1-6-invalid.s | 12 + gas/testsuite/gas/aarch64/sve2p1-6.d | 18 +- gas/testsuite/gas/aarch64/sve2p1-6.s | 18 ++ opcodes/aarch64-dis-2.c | 324 ++++++++++++++------------- opcodes/aarch64-tbl.h | 2 + 7 files changed, 247 insertions(+), 153 deletions(-) diff --git a/gas/testsuite/gas/aarch64/sve2p1-6-invalid.d b/gas/testsuite/gas/aarch64/sve2p1-6-invalid.d index 1aa2b39..0971a58 100644 --- a/gas/testsuite/gas/aarch64/sve2p1-6-invalid.d +++ b/gas/testsuite/gas/aarch64/sve2p1-6-invalid.d @@ -1,3 +1,3 @@ -#name: Test of illegal SVE2.1 TBLQ instruction. +#name: Test of illegal SVE2.1 tblq, uzpq1 and uzpq2 instruction. #as: -march=armv9.4-a #error_output: sve2p1-6-invalid.l diff --git a/gas/testsuite/gas/aarch64/sve2p1-6-invalid.l b/gas/testsuite/gas/aarch64/sve2p1-6-invalid.l index 0fea325..c784ca6 100644 --- a/gas/testsuite/gas/aarch64/sve2p1-6-invalid.l +++ b/gas/testsuite/gas/aarch64/sve2p1-6-invalid.l @@ -16,3 +16,27 @@ .*: Info: tblq z0.h, {z31.h}, z0.h .*: Info: tblq z0.d, {z31.d}, z0.d .*: Error: expected an SVE vector register at operand 3 -- `tblq z0.b,{z0.b},{z31.b}' +.*: Error: expected an SVE vector register at operand 2 -- `uzpq1 z0.s,{z0.b},z0.b' +.*: Error: operand mismatch -- `uzpq1 z31.s,z0.b,z0.h' +.*: Info: did you mean this\? +.*: Info: uzpq1 z31.b, z0.b, z0.b +.*: Info: other valid variant\(s\): +.*: Info: uzpq1 z31.h, z0.h, z0.h +.*: Info: uzpq1 z31.s, z0.s, z0.s +.*: Info: uzpq1 z31.d, z0.d, z0.d +.*: Error: expected an SVE vector register at operand 2 -- `uzpq1 z0.s,{z0.s,z1.s},z0.s' +.*: Error: expected an SVE vector register at operand 2 -- `uzpq1 z0.h,{z0.h-z1.h},z0.h' +.*: Error: expected an SVE vector register at operand 1 -- `uzpq1 {z0.s},z31.s,z0.b' +.*: Error: expected an SVE vector register at operand 2 -- `uzpq1 z0.b,{z0.b},{z31.b}' +.*: Error: expected an SVE vector register at operand 2 -- `uzpq2 z0.s,{z0.b},z0.b' +.*: Error: operand mismatch -- `uzpq2 z31.s,z0.b,z0.h' +.*: Info: did you mean this\? +.*: Info: uzpq2 z31.b, z0.b, z0.b +.*: Info: other valid variant\(s\): +.*: Info: uzpq2 z31.h, z0.h, z0.h +.*: Info: uzpq2 z31.s, z0.s, z0.s +.*: Info: uzpq2 z31.d, z0.d, z0.d +.*: Error: expected an SVE vector register at operand 2 -- `uzpq2 z0.s,{z0.s,z1.s},z0.s' +.*: Error: expected an SVE vector register at operand 2 -- `uzpq2 z0.h,{z0.h-z1.h},z0.h' +.*: Error: expected an SVE vector register at operand 1 -- `uzpq2 {z0.s},z31.s,z0.b' +.*: Error: expected an SVE vector register at operand 2 -- `uzpq2 z0.b,{z0.b},{z31.b}' diff --git a/gas/testsuite/gas/aarch64/sve2p1-6-invalid.s b/gas/testsuite/gas/aarch64/sve2p1-6-invalid.s index 0f8300e..8a6df86 100644 --- a/gas/testsuite/gas/aarch64/sve2p1-6-invalid.s +++ b/gas/testsuite/gas/aarch64/sve2p1-6-invalid.s @@ -4,3 +4,15 @@ tblq z0.s, {z0.s, z1.s}, z0.s tblq z0.s, {z0.s - z1.s}, z0.s tblq z0.s, {z31.s}, z0.b tblq z0.b, {z0.b}, {z31.b} +uzpq1 z0.s, {z0.b}, z0.b +uzpq1 z31.s, z0.b, z0.h +uzpq1 z0.s, {z0.s, z1.s}, z0.s +uzpq1 z0.h, {z0.h - z1.h}, z0.h +uzpq1 {z0.s}, z31.s, z0.b +uzpq1 z0.b, {z0.b}, {z31.b} +uzpq2 z0.s, {z0.b}, z0.b +uzpq2 z31.s, z0.b, z0.h +uzpq2 z0.s, {z0.s, z1.s}, z0.s +uzpq2 z0.h, {z0.h - z1.h}, z0.h +uzpq2 {z0.s}, z31.s, z0.b +uzpq2 z0.b, {z0.b}, {z31.b} diff --git a/gas/testsuite/gas/aarch64/sve2p1-6.d b/gas/testsuite/gas/aarch64/sve2p1-6.d index d146903..b36515f 100644 --- a/gas/testsuite/gas/aarch64/sve2p1-6.d +++ b/gas/testsuite/gas/aarch64/sve2p1-6.d @@ -1,4 +1,4 @@ -#name: Test of SVE2.1 TBLQ instruction. +#name: Test of SVE2.1 tblq, uzpq1 and uzpq2 instruction. #as: -march=armv9.4-a #objdump: -dr @@ -16,3 +16,19 @@ .*: 44dffbff tblq z31.d, {z31.d}, z31.d .*: 444ff945 tblq z5.h, {z10.h}, z15.h .*: 4487f861 tblq z1.s, {z3.s}, z7.s +.*: 4400e800 uzpq1 z0.b, z0.b, z0.b +.*: 4400e81f uzpq1 z31.b, z0.b, z0.b +.*: 44c0e800 uzpq1 z0.d, z0.d, z0.d +.*: 4400ebe0 uzpq1 z0.b, z31.b, z0.b +.*: 441fe800 uzpq1 z0.b, z0.b, z31.b +.*: 44dfebff uzpq1 z31.d, z31.d, z31.d +.*: 448fe945 uzpq1 z5.s, z10.s, z15.s +.*: 4454e9ea uzpq1 z10.h, z15.h, z20.h +.*: 4400ec00 uzpq2 z0.b, z0.b, z0.b +.*: 4400ec1f uzpq2 z31.b, z0.b, z0.b +.*: 44c0ec00 uzpq2 z0.d, z0.d, z0.d +.*: 4400efe0 uzpq2 z0.b, z31.b, z0.b +.*: 441fec00 uzpq2 z0.b, z0.b, z31.b +.*: 44dfefff uzpq2 z31.d, z31.d, z31.d +.*: 448fed45 uzpq2 z5.s, z10.s, z15.s +.*: 4454edea uzpq2 z10.h, z15.h, z20.h diff --git a/gas/testsuite/gas/aarch64/sve2p1-6.s b/gas/testsuite/gas/aarch64/sve2p1-6.s index d2a0ef5..b8c6ed7 100644 --- a/gas/testsuite/gas/aarch64/sve2p1-6.s +++ b/gas/testsuite/gas/aarch64/sve2p1-6.s @@ -6,3 +6,21 @@ tblq z0.b, {z0.b}, z31.b tblq z31.d, {z31.d}, z31.d tblq z5.h, {z10.h}, z15.h tblq z1.s, {z3.s}, z7.s + +uzpq1 z0.b, z0.b, z0.b +uzpq1 z31.b, z0.b, z0.b +uzpq1 z0.d, z0.d, z0.d +uzpq1 z0.b, z31.b, z0.b +uzpq1 z0.b, z0.b, z31.b +uzpq1 z31.d, z31.d, z31.d +uzpq1 z5.s, z10.s, z15.s +uzpq1 z10.h, z15.h, z20.h + +uzpq2 z0.b, z0.b, z0.b +uzpq2 z31.b, z0.b, z0.b +uzpq2 z0.d, z0.d, z0.d +uzpq2 z0.b, z31.b, z0.b +uzpq2 z0.b, z0.b, z31.b +uzpq2 z31.d, z31.d, z31.d +uzpq2 z5.s, z10.s, z15.s +uzpq2 z10.h, z15.h, z20.h diff --git a/opcodes/aarch64-dis-2.c b/opcodes/aarch64-dis-2.c index 5fadd4b..b31ab44 100644 --- a/opcodes/aarch64-dis-2.c +++ b/opcodes/aarch64-dis-2.c @@ -216,7 +216,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x1000000x000101x00xxxxxxxxxxxxxx luti4. */ - return 3396; + return 3398; } else { @@ -251,7 +251,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x1000000xx01101xxxxxxxxxxxxxxxxx luti4. */ - return 3397; + return 3399; } } } @@ -375,7 +375,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x1000000010x11x1xxxx00xxxxxxxxxx movt. */ - return 3398; + return 3400; } } else @@ -1157,7 +1157,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 xx000000101xxxxxxxxxxxxxxxx00xxx fmopa. */ - return 3464; + return 3466; } else { @@ -1165,7 +1165,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 xx000000101xxxxxxxxxxxxxxxx01xxx fmopa. */ - return 3463; + return 3465; } } else @@ -1513,7 +1513,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 xx0000010001xxxx1xx0xxxxx1000xxx fmlall. */ - return 3457; + return 3459; } } } @@ -1543,7 +1543,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 xx0000010001xxxxxxx1xxxxxx00xxxx fdot. */ - return 3442; + return 3444; } } else @@ -1915,7 +1915,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x10000011001xxxxxxx0xxxxxx100xxx fmlall. */ - return 3456; + return 3458; } } } @@ -2020,7 +2020,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x10000011001xxxxxxx1xxxxxx10xxxx fmlal. */ - return 3449; + return 3451; } } } @@ -2193,7 +2193,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x10000011001xxxxxxx1xxxxxx11xxxx fmlal. */ - return 3448; + return 3450; } } } @@ -2235,7 +2235,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 xx0000010100xxxxxxxxxxxxxxxx0xxx fmlall. */ - return 3455; + return 3457; } else { @@ -2603,7 +2603,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 xxx000010101xxxx0xx0xxxxxx111xxx fdot. */ - return 3435; + return 3437; } else { @@ -2672,7 +2672,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 xxx000010101xxxx1xx0xxxxxx001xxx fdot. */ - return 3436; + return 3438; } else { @@ -2751,7 +2751,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 xx0000011100xxxxxxx0xxxxxxx0xxxx fmlal. */ - return 3447; + return 3449; } else { @@ -2806,7 +2806,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 xx0000011101xxxx0xx01xxxxx00xxxx fvdotb. */ - return 3466; + return 3468; } else { @@ -2824,7 +2824,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 xx0000011101xxxxxxx0xxxxxx10xxxx fdot. */ - return 3441; + return 3443; } } } @@ -2898,7 +2898,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 xx0000011101xxxxxxx1xxxxxx10xxxx fvdot. */ - return 3465; + return 3467; } } } @@ -2978,7 +2978,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 xx000001110xxxxx0xx01xxxxxx1xxxx fvdott. */ - return 3467; + return 3469; } else { @@ -3155,7 +3155,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x10000011x1xxxx00xx000xxxx10000x fmlall. */ - return 3461; + return 3463; } else { @@ -3163,7 +3163,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x10000011x1xxxx10xx000xxxx10000x fmlall. */ - return 3462; + return 3464; } } } @@ -3218,7 +3218,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x1000001xx10xxxx0xx000xxxxx00x1x fmlall. */ - return 3459; + return 3461; } else { @@ -3226,7 +3226,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x1000001xx11xxxx0xx000xxxxx00x1x fmlall. */ - return 3460; + return 3462; } } } @@ -3280,7 +3280,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x10000011x1xxxx00xx100xxxx100xxx fdot. */ - return 3445; + return 3447; } else { @@ -3288,7 +3288,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x10000011x1xxxx10xx100xxxx100xxx fdot. */ - return 3446; + return 3448; } } } @@ -3350,7 +3350,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x1000001101xxxx00xx010xxxx1000xx fmlal. */ - return 3453; + return 3455; } else { @@ -3358,7 +3358,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x1000001101xxxx10xx010xxxx1000xx fmlal. */ - return 3454; + return 3456; } } } @@ -3413,7 +3413,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x1000001xx10xxxx0xx010xxxxx001xx fmlal. */ - return 3451; + return 3453; } else { @@ -3421,7 +3421,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x1000001xx11xxxx0xx010xxxxx001xx fmlal. */ - return 3452; + return 3454; } } } @@ -3490,7 +3490,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x1000001xx11xxxx0xx001xxxxx000xx fmlall. */ - return 3458; + return 3460; } } else @@ -3573,7 +3573,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x1000001xx11xxxx0xx011xxxxx00xxx fmlal. */ - return 3450; + return 3452; } } else @@ -3594,7 +3594,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x1000001xx1xx1x00xx111xxxxx00xxx fadd. */ - return 3399; + return 3401; } } else @@ -3613,7 +3613,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x1000001xx1xx1x10xx111xxxxx00xxx fadd. */ - return 3400; + return 3402; } } } @@ -3739,7 +3739,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x10000011x1xxxx00xx100xxxx110xxx fdot. */ - return 3439; + return 3441; } else { @@ -3747,7 +3747,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x10000011x1xxxx10xx100xxxx110xxx fdot. */ - return 3440; + return 3442; } } } @@ -4038,7 +4038,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x1000001xx10xxxx0xx100xxxxx01xxx fdot. */ - return 3443; + return 3445; } else { @@ -4046,7 +4046,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x1000001xx11xxxx0xx100xxxxx01xxx fdot. */ - return 3444; + return 3446; } } } @@ -4317,7 +4317,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x1000001xx1xx1x00xx111xxxxx01xxx fsub. */ - return 3401; + return 3403; } } else @@ -4336,7 +4336,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x1000001xx1xx1x10xx111xxxxx01xxx fsub. */ - return 3402; + return 3404; } } } @@ -4398,7 +4398,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x1000001xx10xxxx0xx100xxxxx11xxx fdot. */ - return 3437; + return 3439; } else { @@ -4406,7 +4406,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x1000001xx11xxxx0xx100xxxxx11xxx fdot. */ - return 3438; + return 3440; } } } @@ -4941,7 +4941,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x1000001xx1xxxxx101000xx1x0xxxx0 fscale. */ - return 3373; + return 3375; } } else @@ -5089,7 +5089,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x1000001x0100100111000xxxx0xxxxx fcvt. */ - return 3370; + return 3372; } else { @@ -5097,7 +5097,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x1000001x1100100111000xxxx0xxxxx bfcvt. */ - return 3365; + return 3367; } } else @@ -5106,7 +5106,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x1000001xx110100111000xxxx0xxxxx fcvt. */ - return 3371; + return 3373; } } else @@ -5157,7 +5157,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x1000001xx1xx100111000xxxx1xxxxx fcvtn. */ - return 3372; + return 3374; } } } @@ -5240,7 +5240,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x10000010010x110111000xxxxxxxxx0 f1cvt. */ - return 3366; + return 3368; } else { @@ -5248,7 +5248,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x10000011010x110111000xxxxxxxxx0 f2cvt. */ - return 3367; + return 3369; } } else @@ -5259,7 +5259,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x10000010110x110111000xxxxxxxxx0 bf1cvt. */ - return 3361; + return 3363; } else { @@ -5267,7 +5267,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x10000011110x110111000xxxxxxxxx0 bf2cvt. */ - return 3362; + return 3364; } } } @@ -5302,7 +5302,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x1000001001xxx10111000xxxxxxxxx1 f1cvtl. */ - return 3368; + return 3370; } else { @@ -5310,7 +5310,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x1000001101xxx10111000xxxxxxxxx1 f2cvtl. */ - return 3369; + return 3371; } } else @@ -5321,7 +5321,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x1000001011xxx10111000xxxxxxxxx1 bf1cvtl. */ - return 3363; + return 3365; } else { @@ -5329,7 +5329,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x1000001111xxx10111000xxxxxxxxx1 bf2cvtl. */ - return 3364; + return 3366; } } } @@ -5598,7 +5598,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x1000001xx1xxxxx1x1100xx100xxxx0 fscale. */ - return 3375; + return 3377; } } else @@ -5774,7 +5774,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x1000001xx1xxxxx1x1010xx100xxxx0 fscale. */ - return 3374; + return 3376; } else { @@ -5782,7 +5782,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x1000001xx1xxxxx1x1110xx100xxxx0 fscale. */ - return 3376; + return 3378; } } } @@ -10950,7 +10950,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x0x11010000xxxxxxx1xxxxxxxxxxxxx addpt. */ - return 3377; + return 3379; } else { @@ -10958,7 +10958,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x1x11010000xxxxxxx1xxxxxxxxxxxxx subpt. */ - return 3378; + return 3380; } } } @@ -11876,7 +11876,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 xxxx1011x11xxxxx0xxxxxxxxxxxxxxx maddpt. */ - return 3379; + return 3381; } else { @@ -11884,7 +11884,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 xxxx1011x11xxxxx1xxxxxxxxxxxxxxx msubpt. */ - return 3380; + return 3382; } } } @@ -11969,7 +11969,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 000001x0xx000100000xxxxxxxxxxxxx addpt. */ - return 3381; + return 3383; } else { @@ -12076,7 +12076,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 000001x0xx000101000xxxxxxxxxxxxx subpt. */ - return 3383; + return 3385; } else { @@ -12281,7 +12281,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 000001x0xx1xxxxx000010xxxxxxxxxx addpt. */ - return 3382; + return 3384; } else { @@ -12322,7 +12322,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 000001x0xx1xxxxx000011xxxxxxxxxx subpt. */ - return 3384; + return 3386; } else { @@ -13980,7 +13980,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 010001x0xx0xxxxx110100xxxxxxxxxx mlapt. */ - return 3386; + return 3388; } } else @@ -14010,7 +14010,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 010001x0xx0xxxxx110110xxxxxxxxxx madpt. */ - return 3385; + return 3387; } } } @@ -15164,7 +15164,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 110001x0x00xxxxx101xxxxxxxxxxxxx ld1q. */ - return 3322; + return 3324; } else { @@ -16170,11 +16170,33 @@ aarch64_opcode_lookup_1 (uint32_t word) { if (((word >> 31) & 0x1) == 0) { - /* 33222222222211111111110000000000 - 10987654321098765432109876543210 - 010001x0xx0xxxxx111xxxxxxxxxxxxx - tblq. */ - return 3320; + if (((word >> 10) & 0x1) == 0) + { + if (((word >> 12) & 0x1) == 0) + { + /* 33222222222211111111110000000000 + 10987654321098765432109876543210 + 010001x0xx0xxxxx1110x0xxxxxxxxxx + uzpq1. */ + return 3322; + } + else + { + /* 33222222222211111111110000000000 + 10987654321098765432109876543210 + 010001x0xx0xxxxx1111x0xxxxxxxxxx + tblq. */ + return 3320; + } + } + else + { + /* 33222222222211111111110000000000 + 10987654321098765432109876543210 + 010001x0xx0xxxxx111xx1xxxxxxxxxx + uzpq2. */ + return 3323; + } } else { @@ -16652,7 +16674,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 111001x0x00xxxxx000xxxxxxxxxxxxx st3q. */ - return 3331; + return 3333; } else { @@ -16662,7 +16684,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 111001x0010xxxxx000xxxxxxxxxxxxx st2q. */ - return 3330; + return 3332; } else { @@ -16670,7 +16692,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 111001x0110xxxxx000xxxxxxxxxxxxx st4q. */ - return 3332; + return 3334; } } } @@ -17336,7 +17358,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 101001x0xx01xxxx111xxxxxxxxxxxxx ld2q. */ - return 3323; + return 3325; } } } @@ -17472,7 +17494,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 101001x0xx1xxxxx100xxxxxxxxxxxxx ld2q. */ - return 3326; + return 3328; } } else @@ -17617,7 +17639,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 111001x00x1xxxxx000xxxxxxxxxxxxx st2q. */ - return 3333; + return 3335; } } else @@ -17660,7 +17682,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 111001x0101xxxxx000xxxxxxxxxxxxx st3q. */ - return 3334; + return 3336; } } else @@ -17701,7 +17723,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 111001x0111xxxxx000xxxxxxxxxxxxx st4q. */ - return 3335; + return 3337; } } } @@ -17730,7 +17752,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 011001x0001xxxxx0100x1xxxxxxxxxx fdot. */ - return 3422; + return 3424; } } else @@ -17739,7 +17761,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 011001x0001xxxxx0101xxxxxxxxxxxx fmlalb. */ - return 3424; + return 3426; } } else @@ -17780,7 +17802,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 011001x0101xxxxx0101xxxxxxxxxxxx fmlalt. */ - return 3434; + return 3436; } } else @@ -17813,7 +17835,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 011001x0011xxxxx010xx1xxxxxxxxxx fdot. */ - return 3420; + return 3422; } } else @@ -17884,7 +17906,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x11001x0001xxxxx100010xxxxxxxxxx fmlallbb. */ - return 3425; + return 3427; } } else @@ -17893,7 +17915,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x11001x0001xxxxx1000x1xxxxxxxxxx fdot. */ - return 3421; + return 3423; } } else @@ -17902,7 +17924,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x11001x0001xxxxx1100xxxxxxxxxxxx fmlallbb. */ - return 3426; + return 3428; } } else @@ -17911,7 +17933,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x11001x0001xxxxx1x01xxxxxxxxxxxx fmlallbt. */ - return 3427; + return 3429; } } else @@ -17938,7 +17960,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 011001x0101xxxxx100010xxxxxxxxxx fmlalb. */ - return 3423; + return 3425; } } else @@ -17956,7 +17978,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 011001x0101xxxxx1100xxxxxxxxxxxx fmlalltb. */ - return 3430; + return 3432; } } else @@ -17965,7 +17987,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 011001x0101xxxxx1x01xxxxxxxxxxxx fmlalt. */ - return 3433; + return 3435; } } else @@ -17998,7 +18020,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x11001x0011xxxxx100xx1xxxxxxxxxx fdot. */ - return 3419; + return 3421; } } else @@ -18007,7 +18029,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x11001x0011xxxxx110xxxxxxxxxxxxx fmlallbt. */ - return 3428; + return 3430; } } else @@ -18039,7 +18061,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 011001x0111xxxxx110xxxxxxxxxxxxx fmlalltt. */ - return 3432; + return 3434; } } else @@ -18338,7 +18360,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 111001x0xx1xxxxx001xxxxxxxxxxxxx st1q. */ - return 3329; + return 3331; } } else @@ -18353,7 +18375,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x11001x0001xxxxx1010xxxxxxxxxxxx fmlalltb. */ - return 3429; + return 3431; } else { @@ -18361,7 +18383,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x11001x0001xxxxx1011xxxxxxxxxxxx fmlalltt. */ - return 3431; + return 3433; } } else @@ -20717,7 +20739,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 010001x1xx1xxxxx101100xxxxxxxxxx luti2. */ - return 3391; + return 3393; } } else @@ -20726,7 +20748,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 010001x1xx1xxxxx101x10xxxxxxxxxx luti2. */ - return 3392; + return 3394; } } else @@ -20739,7 +20761,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 010001x1xx1xxxxx101001xxxxxxxxxx luti4. */ - return 3393; + return 3395; } else { @@ -20747,7 +20769,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 010001x1xx1xxxxx101101xxxxxxxxxx luti4. */ - return 3394; + return 3396; } } else @@ -20756,7 +20778,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 010001x1xx1xxxxx101x11xxxxxxxxxx luti4. */ - return 3395; + return 3397; } } } @@ -21707,7 +21729,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 011001x1xx001000001x00xxxxxxxxxx f1cvt. */ - return 3353; + return 3355; } else { @@ -21715,7 +21737,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 011001x1xx001000001x10xxxxxxxxxx bf1cvt. */ - return 3349; + return 3351; } } else @@ -21726,7 +21748,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 011001x1xx001000001x01xxxxxxxxxx f2cvt. */ - return 3354; + return 3356; } else { @@ -21734,7 +21756,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 011001x1xx001000001x11xxxxxxxxxx bf2cvt. */ - return 3350; + return 3352; } } } @@ -21779,7 +21801,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 011001x1xx0x1010001x00xxxxxxxxxx fcvtn. */ - return 3358; + return 3360; } else { @@ -21787,7 +21809,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 011001x1xx0x1010001x10xxxxxxxxxx bfcvtn. */ - return 3357; + return 3359; } } else @@ -21798,7 +21820,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 011001x1xx0x1010001x01xxxxxxxxxx fcvtnb. */ - return 3359; + return 3361; } else { @@ -21806,7 +21828,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 011001x1xx0x1010001x11xxxxxxxxxx fcvtnt. */ - return 3360; + return 3362; } } } @@ -21867,7 +21889,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 011001x1xx0x1001001x00xxxxxxxxxx f1cvtlt. */ - return 3355; + return 3357; } else { @@ -21875,7 +21897,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 011001x1xx0x1001001x10xxxxxxxxxx bf1cvtlt. */ - return 3351; + return 3353; } } else @@ -21886,7 +21908,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 011001x1xx0x1001001x01xxxxxxxxxx f2cvtlt. */ - return 3356; + return 3358; } else { @@ -21894,7 +21916,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 011001x1xx0x1001001x11xxxxxxxxxx bf2cvtlt. */ - return 3352; + return 3354; } } } @@ -23220,7 +23242,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 101001x10x01xxxx111xxxxxxxxxxxxx ld3q. */ - return 3324; + return 3326; } else { @@ -23228,7 +23250,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 101001x11x01xxxx111xxxxxxxxxxxxx ld4q. */ - return 3325; + return 3327; } } } @@ -24401,7 +24423,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 101001x10x1xxxxx100xxxxxxxxxxxxx ld3q. */ - return 3327; + return 3329; } else { @@ -24409,7 +24431,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 101001x11x1xxxxx100xxxxxxxxxxxxx ld4q. */ - return 3328; + return 3330; } } else @@ -26474,7 +26496,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 0x001110100xxxxxxxx100xxxxxxxxxx luti2. */ - return 3387; + return 3389; } } } @@ -26488,7 +26510,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 0x001110010xxxxxxxx000xxxxxxxxxx luti4. */ - return 3389; + return 3391; } else { @@ -26496,7 +26518,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 0x001110010xxxxxxxx100xxxxxxxxxx luti4. */ - return 3390; + return 3392; } } else @@ -26505,7 +26527,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 0x001110110xxxxxxxxx00xxxxxxxxxx luti2. */ - return 3388; + return 3390; } } } @@ -26621,7 +26643,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 00001110x00xxxxxx10001xxxxxxxxxx fmlallbb. */ - return 3411; + return 3413; } else { @@ -26629,7 +26651,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 01001110x00xxxxxx10001xxxxxxxxxx fmlalltb. */ - return 3413; + return 3415; } } else @@ -26640,7 +26662,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 00001110x10xxxxxx10001xxxxxxxxxx fmlallbt. */ - return 3412; + return 3414; } else { @@ -26648,7 +26670,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 01001110x10xxxxxx10001xxxxxxxxxx fmlalltt. */ - return 3414; + return 3416; } } } @@ -26736,7 +26758,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 00001110x00xxxxxx11101xxxxxxxxxx fcvtn. */ - return 3344; + return 3346; } else { @@ -26744,7 +26766,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 01001110x00xxxxxx11101xxxxxxxxxx fcvtn2. */ - return 3345; + return 3347; } } else @@ -26753,7 +26775,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 0x001110x10xxxxxx11101xxxxxxxxxx fcvtn. */ - return 3346; + return 3348; } } } @@ -26896,7 +26918,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 0x001110x00xxxxxx11111xxxxxxxxxx fdot. */ - return 3403; + return 3405; } else { @@ -26906,7 +26928,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 0x001110010xxxxxx11111xxxxxxxxxx fdot. */ - return 3405; + return 3407; } else { @@ -26916,7 +26938,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 00001110110xxxxxx11111xxxxxxxxxx fmlalb. */ - return 3407; + return 3409; } else { @@ -26924,7 +26946,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 01001110110xxxxxx11111xxxxxxxxxx fmlalt. */ - return 3408; + return 3410; } } } @@ -27198,7 +27220,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 xx101110110xxxxx0x1111xxxxxxxxxx fscale. */ - return 3347; + return 3349; } } } @@ -28590,7 +28612,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x0101110001xxxx1011110xxxxxxxxxx f1cvtl. */ - return 3340; + return 3342; } else { @@ -28598,7 +28620,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x1101110001xxxx1011110xxxxxxxxxx f1cvtl2. */ - return 3341; + return 3343; } } else @@ -28609,7 +28631,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x0101110101xxxx1011110xxxxxxxxxx bf1cvtl. */ - return 3336; + return 3338; } else { @@ -28617,7 +28639,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x1101110101xxxx1011110xxxxxxxxxx bf1cvtl2. */ - return 3337; + return 3339; } } } @@ -28631,7 +28653,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x0101110011xxxx1011110xxxxxxxxxx f2cvtl. */ - return 3342; + return 3344; } else { @@ -28639,7 +28661,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x1101110011xxxx1011110xxxxxxxxxx f2cvtl2. */ - return 3343; + return 3345; } } else @@ -28650,7 +28672,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x0101110111xxxx1011110xxxxxxxxxx bf2cvtl. */ - return 3338; + return 3340; } else { @@ -28658,7 +28680,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x1101110111xxxx1011110xxxxxxxxxx bf2cvtl2. */ - return 3339; + return 3341; } } } @@ -30657,7 +30679,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 xx1011101x1xxxxx111111xxxxxxxxxx fscale. */ - return 3348; + return 3350; } } } @@ -32373,7 +32395,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 xx00111100xxxxxx0000x0xxxxxxxxxx fdot. */ - return 3404; + return 3406; } else { @@ -32403,7 +32425,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 xx00111101xxxxxx0000x0xxxxxxxxxx fdot. */ - return 3406; + return 3408; } else { @@ -32413,7 +32435,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x000111111xxxxxx0000x0xxxxxxxxxx fmlalb. */ - return 3409; + return 3411; } else { @@ -32421,7 +32443,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x100111111xxxxxx0000x0xxxxxxxxxx fmlalt. */ - return 3410; + return 3412; } } } @@ -32963,7 +32985,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x010111100xxxxxx1000x0xxxxxxxxxx fmlallbb. */ - return 3415; + return 3417; } else { @@ -32971,7 +32993,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x110111100xxxxxx1000x0xxxxxxxxxx fmlalltb. */ - return 3417; + return 3419; } } else @@ -33002,7 +33024,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x0101111x1xxxxxx1000x0xxxxxxxxxx fmlallbt. */ - return 3416; + return 3418; } else { @@ -33010,7 +33032,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 x1101111x1xxxxxx1000x0xxxxxxxxxx fmlalltt. */ - return 3418; + return 3420; } } } diff --git a/opcodes/aarch64-tbl.h b/opcodes/aarch64-tbl.h index 56a6c9d..7089f16 100644 --- a/opcodes/aarch64-tbl.h +++ b/opcodes/aarch64-tbl.h @@ -6643,6 +6643,8 @@ const struct aarch64_opcode aarch64_opcode_table[] = SVE2p1_INSN("orqv",0x041c2000, 0xff3fe000, sve2_urqvs, 0, OP3 (Vd, SVE_Pg3, SVE_Zn), OP_SVE_vUS_BHSD_BHSD, F_OPD_SIZE, 0), SVE2p1_INSN("tblq",0x4400f800, 0xff20fc00, sve_size_bhsd, 0, OP3 (SVE_Zd, SVE_ZnxN, SVE_Zm_16), OP_SVE_VVV_BHSD, F_OD(1), 0), SVE2p1_INSNC("extq",0x05602400, 0xfff0fc00, sve_misc, 0, OP4 (SVE_Zd, SVE_Zd, SVE_Zm_5, SVE_UIMM4), OP_SVE_BBBU, 0, C_SCAN_MOVPRFX, 1), + SVE2p1_INSN("uzpq1",0x4400e800, 0xff20fc00, sve_size_bhsd, 0, OP3 (SVE_Zd, SVE_Zn, SVE_Zm_16), OP_SVE_VVV_BHSD, 0, 0), + SVE2p1_INSN("uzpq2",0x4400ec00, 0xff20fc00, sve_size_bhsd, 0, OP3 (SVE_Zd, SVE_Zn, SVE_Zm_16), OP_SVE_VVV_BHSD, 0, 0), SVE2p1_INSN("ld1q",0xc400a000, 0xffe0e000, sve_misc, 0, OP3 (SVE_ZtxN, SVE_Pg3, SVE_ADDR_ZX), OP_SVE_QZD, F_OD (1), 0), SVE2p1_INSN("ld2q",0xa490e000, 0xfff0e000, sve_misc, 0, OP3 (SVE_ZtxN, SVE_Pg3, SVE_ADDR_RI_S4x2xVL), OP_SVE_QZU, F_OD (2), 0), -- cgit v1.1