aboutsummaryrefslogtreecommitdiff
path: root/gas
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2020-05-11 09:37:14 +0930
committerAlan Modra <amodra@gmail.com>2020-05-11 21:08:37 +0930
commit6edbfd3beb15105dfe5c59ee3b22e3daefaea509 (patch)
treef4fef2fba175ebfec254ee0e771062cbb17a12c0 /gas
parentc7d7aea2f5fadff84eee78aaa0b1830016d26319 (diff)
downloadfsf-binutils-gdb-6edbfd3beb15105dfe5c59ee3b22e3daefaea509.zip
fsf-binutils-gdb-6edbfd3beb15105dfe5c59ee3b22e3daefaea509.tar.gz
fsf-binutils-gdb-6edbfd3beb15105dfe5c59ee3b22e3daefaea509.tar.bz2
Power10 SIMD permute class operations
opcodes/ * ppc-opc.c (insert_imm32, extract_imm32): New functions. (insert_xts, extract_xts): New functions. (IMM32, UIM3, IX, UIM5, SH3, XTS, P8RR): Define. (P_XX4_MASK, P_UXX4_MASK, VSOP, P_VS_MASK, P_VSI_MASK): Define. (VXRC_MASK, VXSH_MASK): Define. (powerpc_opcodes): Add vinsbvlx, vsldbi, vextdubvlx, vextdubvrx, vextduhvlx, vextduhvrx, vextduwvlx, vextduwvrx, vextddvlx, vextddvrx, vinshvlx, vinswvlx, vinsw, vinsbvrx, vinshvrx, vinswvrx, vinsd, vinsblx, vsrdbi, vinshlx, vinswlx, vinsdlx, vinsbrx, vinshrx, vinswrx, vinsdrx, lxvkq. (prefix_opcodes): Add xxsplti32dx, xxspltidp, xxspltiw, xxblendvb, xxblendvh, xxblendvw, xxblendvd, xxpermx. gas/ * testsuite/gas/ppc/simd_perm.d, * testsuite/gas/ppc/simd_perm.s: New test. * testsuite/gas/ppc/ppc.exp: Run it.
Diffstat (limited to 'gas')
-rw-r--r--gas/ChangeLog6
-rw-r--r--gas/testsuite/gas/ppc/ppc.exp1
-rw-r--r--gas/testsuite/gas/ppc/simd_perm.d53
-rw-r--r--gas/testsuite/gas/ppc/simd_perm.s37
4 files changed, 97 insertions, 0 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 763e447..3a81d84 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,5 +1,11 @@
2020-05-11 Alan Modra <amodra@gmail.com>
+ * testsuite/gas/ppc/simd_perm.d,
+ * testsuite/gas/ppc/simd_perm.s: New test.
+ * testsuite/gas/ppc/ppc.exp: Run it.
+
+2020-05-11 Alan Modra <amodra@gmail.com>
+
* testsuite/gas/ppc/int128.d,
* testsuite/gas/ppc/int128.s: New test.
* testsuite/gas/ppc/ppc.exp: Run it.
diff --git a/gas/testsuite/gas/ppc/ppc.exp b/gas/testsuite/gas/ppc/ppc.exp
index 6732b90..afa53f3 100644
--- a/gas/testsuite/gas/ppc/ppc.exp
+++ b/gas/testsuite/gas/ppc/ppc.exp
@@ -135,3 +135,4 @@ run_dump_test "byte_rev"
run_dump_test "vec_mul"
run_dump_test "vsx_32byte"
run_dump_test "int128"
+run_dump_test "simd_perm"
diff --git a/gas/testsuite/gas/ppc/simd_perm.d b/gas/testsuite/gas/ppc/simd_perm.d
new file mode 100644
index 0000000..62f9f8d
--- /dev/null
+++ b/gas/testsuite/gas/ppc/simd_perm.d
@@ -0,0 +1,53 @@
+#as: -mpower10
+#objdump: -dr -Mpower10
+#name: SIMD permute
+
+.*
+
+
+Disassembly of section \.text:
+
+0+0 <_start>:
+.*: (10 01 10 d8|d8 10 01 10) vextdubvlx v0,v1,v2,r3
+.*: (10 85 31 d9|d9 31 85 10) vextdubvrx v4,v5,v6,r7
+.*: (11 09 52 da|da 52 09 11) vextduhvlx v8,v9,v10,r11
+.*: (11 8d 73 db|db 73 8d 11) vextduhvrx v12,v13,v14,r15
+.*: (12 11 94 dc|dc 94 11 12) vextduwvlx v16,v17,v18,r19
+.*: (12 95 b5 dd|dd b5 95 12) vextduwvrx v20,v21,v22,r23
+.*: (13 19 d6 de|de d6 19 13) vextddvlx v24,v25,v26,r27
+.*: (13 9d f7 df|df f7 9d 13) vextddvrx v28,v29,v30,r31
+.*: (10 01 12 0f|0f 12 01 10) vinsblx v0,r1,r2
+.*: (10 64 2b 0f|0f 2b 64 10) vinsbrx v3,r4,r5
+.*: (10 c7 42 4f|4f 42 c7 10) vinshlx v6,r7,r8
+.*: (11 2a 5b 4f|4f 5b 2a 11) vinshrx v9,r10,r11
+.*: (11 8d 72 8f|8f 72 8d 11) vinswlx v12,r13,r14
+.*: (11 f0 8b 8f|8f 8b f0 11) vinswrx v15,r16,r17
+.*: (12 53 a2 cf|cf a2 53 12) vinsdlx v18,r19,r20
+.*: (12 b6 bb cf|cf bb b6 12) vinsdrx v21,r22,r23
+.*: (13 19 d0 0f|0f d0 19 13) vinsbvlx v24,r25,v26
+.*: (13 7c e9 0f|0f e9 7c 13) vinsbvrx v27,r28,v29
+.*: (13 df 00 4f|4f 00 df 13) vinshvlx v30,r31,v0
+.*: (10 22 19 4f|4f 19 22 10) vinshvrx v1,r2,v3
+.*: (10 85 30 8f|8f 30 85 10) vinswvlx v4,r5,v6
+.*: (10 e8 49 8f|8f 49 e8 10) vinswvrx v7,r8,v9
+.*: (11 4c 58 cf|cf 58 4c 11) vinsw v10,r11,12
+.*: (11 a3 71 cf|cf 71 a3 11) vinsd v13,r14,3
+.*: (11 f0 89 56|56 89 f0 11) vsldbi v15,v16,v17,5
+.*: (12 53 a3 d6|d6 a3 53 12) vsrdbi v18,v19,v20,7
+.*: (05 00 01 23|23 01 00 05) xxspltiw vs63,19088743
+.*: (83 e7 45 67|67 45 e7 83)
+.*: (05 00 89 ab|ab 89 00 05) xxsplti32dx vs62,1,2309737967
+.*: (83 c3 cd ef|ef cd c3 83)
+.*: (05 00 01 23|23 01 00 05) xxspltidp vs61,19088743
+.*: (83 a5 45 67|67 45 a5 83)
+.*: (f3 9f c2 d1|d1 c2 9f f3) lxvkq vs60,24
+.*: (05 00 00 00|00 00 00 05) xxblendvb vs59,vs58,vs57,vs56
+.*: (87 7a ce 0f|0f ce 7a 87)
+.*: (05 00 00 00|00 00 00 05) xxblendvh vs55,vs54,vs53,vs52
+.*: (86 f6 ad 1f|1f ad f6 86)
+.*: (05 00 00 00|00 00 00 05) xxblendvw vs51,vs50,vs49,vs48
+.*: (86 72 8c 2f|2f 8c 72 86)
+.*: (05 00 00 00|00 00 00 05) xxblendvd vs47,vs46,vs45,vs44
+.*: (85 ee 6b 3f|3f 6b ee 85)
+.*: (05 00 00 07|07 00 00 05) xxpermx vs43,vs42,vs41,vs40,7
+.*: (89 6a 4a 0f|0f 4a 6a 89)
diff --git a/gas/testsuite/gas/ppc/simd_perm.s b/gas/testsuite/gas/ppc/simd_perm.s
new file mode 100644
index 0000000..c9b3986
--- /dev/null
+++ b/gas/testsuite/gas/ppc/simd_perm.s
@@ -0,0 +1,37 @@
+ .text
+_start:
+ vextdubvlx 0,1,2,3
+ vextdubvrx 4,5,6,7
+ vextduhvlx 8,9,10,11
+ vextduhvrx 12,13,14,15
+ vextduwvlx 16,17,18,19
+ vextduwvrx 20,21,22,23
+ vextddvlx 24,25,26,27
+ vextddvrx 28,29,30,31
+ vinsblx 0,1,2
+ vinsbrx 3,4,5
+ vinshlx 6,7,8
+ vinshrx 9,10,11
+ vinswlx 12,13,14
+ vinswrx 15,16,17
+ vinsdlx 18,19,20
+ vinsdrx 21,22,23
+ vinsbvlx 24,25,26
+ vinsbvrx 27,28,29
+ vinshvlx 30,31,0
+ vinshvrx 1,2,3
+ vinswvlx 4,5,6
+ vinswvrx 7,8,9
+ vinsw 10,11,12
+ vinsd 13,14,3
+ vsldbi 15,16,17,5
+ vsrdbi 18,19,20,7
+ xxspltiw 63,0x01234567
+ xxsplti32dx 62,1,0x89abcdef
+ xxspltidp 61,0x01234567
+ lxvkq 60,24
+ xxblendvb 59,58,57,56
+ xxblendvh 55,54,53,52
+ xxblendvw 51,50,49,48
+ xxblendvd 47,46,45,44
+ xxpermx 43,42,41,40,7