[02/11] x86: replace EXqScalarS by EXqVexScalarS

Message ID 4a27e00a-4d71-5e87-844d-4c9bc5ca2739@suse.com
State New
Headers show
Series
  • x86: disassembler size reduction and fixes
Related show

Commit Message

Jan Beulich July 3, 2020, 1:52 p.m.
There's only a single user, that that one can do fine with the
alternative, as the "Vex" aspect of the other operand kind is meaningful
only on 3-operand insns.
   
While doing this I noticed that I didn't need to do the same adjustment
in the EVEX tables, and voilĂ  - there was a bug, which gets fixed at the
same time (see the testsuite changes).

gas/
2020-07-XX  Jan Beulich  <jbeulich@suse.com>

	* testsuite/gas/i386/avx512f-opts.s: Add EVEX movq tests.
	* testsuite/gas/i386/x86-64-avx512f-opts.s: Add blank line.
	* testsuite/gas/i386/avx512f-opts-intel.d,
	testsuite/gas/i386/avx512f-opts.d
	testsuite/gas/i386/x86-64-avx512f-opts-intel.d
	testsuite/gas/i386/x86-64-avx512f-opts.d: Adjust expectations.

opcodes/
2020-07-XX  Jan Beulich  <jbeulich@suse.com>

	* i386-dis.c (EXqScalarS): Delete.
	(vex_len_table): Replace EXqScalarS by EXqVexScalarS.
	* i386-dis-evex-w.h (vmovq): Use EXqVexScalarS.

Patch

--- a/gas/testsuite/gas/i386/avx512f-opts-intel.d
+++ b/gas/testsuite/gas/i386/avx512f-opts-intel.d
@@ -65,6 +65,8 @@  Disassembly of section .text:
 [ 	]*[a-f0-9]+:	62 f1 7c 4f 10 f5    	vmovups zmm6\{k7\},zmm5
 [ 	]*[a-f0-9]+:	62 f1 7c cf 11 ee    	vmovups.s zmm6\{k7\}\{z\},zmm5
 [ 	]*[a-f0-9]+:	62 f1 7c cf 10 f5    	vmovups zmm6\{k7\}\{z\},zmm5
+[ 	]*[a-f0-9]+:	62 f1 fd 08 d6 ee    	vmovq\.s xmm6,xmm5
+[ 	]*[a-f0-9]+:	62 f1 fe 08 7e f5    	vmovq  xmm6,xmm5
 [ 	]*[a-f0-9]+:	62 f1 fd 48 29 ee    	vmovapd.s zmm6,zmm5
 [ 	]*[a-f0-9]+:	62 f1 fd 48 28 f5    	vmovapd zmm6,zmm5
 [ 	]*[a-f0-9]+:	62 f1 fd 4f 29 ee    	vmovapd.s zmm6\{k7\},zmm5
--- a/gas/testsuite/gas/i386/avx512f-opts.d
+++ b/gas/testsuite/gas/i386/avx512f-opts.d
@@ -64,6 +64,8 @@  Disassembly of section .text:
 [ 	]*[a-f0-9]+:	62 f1 7c 4f 10 f5    	vmovups %zmm5,%zmm6\{%k7\}
 [ 	]*[a-f0-9]+:	62 f1 7c cf 11 ee    	vmovups.s %zmm5,%zmm6\{%k7\}\{z\}
 [ 	]*[a-f0-9]+:	62 f1 7c cf 10 f5    	vmovups %zmm5,%zmm6\{%k7\}\{z\}
+[ 	]*[a-f0-9]+:	62 f1 fd 08 d6 ee    	vmovq\.s %xmm5,%xmm6
+[ 	]*[a-f0-9]+:	62 f1 fe 08 7e f5    	vmovq  %xmm5,%xmm6
 [ 	]*[a-f0-9]+:	62 f1 fd 48 29 ee    	vmovapd.s %zmm5,%zmm6
 [ 	]*[a-f0-9]+:	62 f1 fd 48 28 f5    	vmovapd %zmm5,%zmm6
 [ 	]*[a-f0-9]+:	62 f1 fd 4f 29 ee    	vmovapd.s %zmm5,%zmm6\{%k7\}
--- a/gas/testsuite/gas/i386/avx512f-opts.s
+++ b/gas/testsuite/gas/i386/avx512f-opts.s
@@ -60,6 +60,9 @@  _start:
 	vmovups	%zmm5, %zmm6{%k7}	 # AVX512F
 	vmovups.s	%zmm5, %zmm6{%k7}{z}	 # AVX512F
 	vmovups	%zmm5, %zmm6{%k7}{z}	 # AVX512F
+	{evex} vmovq.s	%xmm5,%xmm6
+	{evex} vmovq	%xmm5,%xmm6
+
 	.intel_syntax noprefix
 	vmovapd.s	zmm6, zmm5	 # AVX512F
 	vmovapd	zmm6, zmm5	 # AVX512F
--- a/gas/testsuite/gas/i386/x86-64-avx512f-opts-intel.d
+++ b/gas/testsuite/gas/i386/x86-64-avx512f-opts-intel.d
@@ -55,7 +55,7 @@  Disassembly of section .text:
 [ 	]*[a-f0-9]+:	62 61 fd 08 7e f0    	vmovq  rax,xmm30
 [ 	]*[a-f0-9]+:	62 41 fd 08 7e f0    	vmovq  r8,xmm30
 [ 	]*[a-f0-9]+:	62 41 fd 08 7e f0    	vmovq  r8,xmm30
-[ 	]*[a-f0-9]+:	62 01 fd 08 d6 ee    	vmovq  xmm30,xmm29
+[ 	]*[a-f0-9]+:	62 01 fd 08 d6 ee    	vmovq\.s xmm30,xmm29
 [ 	]*[a-f0-9]+:	62 01 fe 08 7e f5    	vmovq  xmm30,xmm29
 [ 	]*[a-f0-9]+:	62 01 97 07 11 e6    	vmovsd.s xmm30\{k7\},xmm29,xmm28
 [ 	]*[a-f0-9]+:	62 01 97 07 10 f4    	vmovsd xmm30\{k7\},xmm29,xmm28
@@ -123,7 +123,7 @@  Disassembly of section .text:
 [ 	]*[a-f0-9]+:	62 61 fd 08 7e f0    	vmovq  rax,xmm30
 [ 	]*[a-f0-9]+:	62 41 fd 08 7e f0    	vmovq  r8,xmm30
 [ 	]*[a-f0-9]+:	62 41 fd 08 7e f0    	vmovq  r8,xmm30
-[ 	]*[a-f0-9]+:	62 01 fd 08 d6 ee    	vmovq  xmm30,xmm29
+[ 	]*[a-f0-9]+:	62 01 fd 08 d6 ee    	vmovq\.s xmm30,xmm29
 [ 	]*[a-f0-9]+:	62 01 fe 08 7e f5    	vmovq  xmm30,xmm29
 [ 	]*[a-f0-9]+:	62 01 97 07 11 e6    	vmovsd.s xmm30\{k7\},xmm29,xmm28
 [ 	]*[a-f0-9]+:	62 01 97 07 10 f4    	vmovsd xmm30\{k7\},xmm29,xmm28
--- a/gas/testsuite/gas/i386/x86-64-avx512f-opts.d
+++ b/gas/testsuite/gas/i386/x86-64-avx512f-opts.d
@@ -54,7 +54,7 @@  Disassembly of section .text:
 [ 	]*[a-f0-9]+:	62 61 fd 08 7e f0    	vmovq  %xmm30,%rax
 [ 	]*[a-f0-9]+:	62 41 fd 08 7e f0    	vmovq  %xmm30,%r8
 [ 	]*[a-f0-9]+:	62 41 fd 08 7e f0    	vmovq  %xmm30,%r8
-[ 	]*[a-f0-9]+:	62 01 fd 08 d6 ee    	vmovq  %xmm29,%xmm30
+[ 	]*[a-f0-9]+:	62 01 fd 08 d6 ee    	vmovq\.s %xmm29,%xmm30
 [ 	]*[a-f0-9]+:	62 01 fe 08 7e f5    	vmovq  %xmm29,%xmm30
 [ 	]*[a-f0-9]+:	62 01 97 07 11 e6    	vmovsd.s %xmm28,%xmm29,%xmm30\{%k7\}
 [ 	]*[a-f0-9]+:	62 01 97 07 10 f4    	vmovsd %xmm28,%xmm29,%xmm30\{%k7\}
@@ -122,7 +122,7 @@  Disassembly of section .text:
 [ 	]*[a-f0-9]+:	62 61 fd 08 7e f0    	vmovq  %xmm30,%rax
 [ 	]*[a-f0-9]+:	62 41 fd 08 7e f0    	vmovq  %xmm30,%r8
 [ 	]*[a-f0-9]+:	62 41 fd 08 7e f0    	vmovq  %xmm30,%r8
-[ 	]*[a-f0-9]+:	62 01 fd 08 d6 ee    	vmovq  %xmm29,%xmm30
+[ 	]*[a-f0-9]+:	62 01 fd 08 d6 ee    	vmovq\.s %xmm29,%xmm30
 [ 	]*[a-f0-9]+:	62 01 fe 08 7e f5    	vmovq  %xmm29,%xmm30
 [ 	]*[a-f0-9]+:	62 01 97 07 11 e6    	vmovsd.s %xmm28,%xmm29,%xmm30\{%k7\}
 [ 	]*[a-f0-9]+:	62 01 97 07 10 f4    	vmovsd %xmm28,%xmm29,%xmm30\{%k7\}
--- a/gas/testsuite/gas/i386/x86-64-avx512f-opts.s
+++ b/gas/testsuite/gas/i386/x86-64-avx512f-opts.s
@@ -72,6 +72,7 @@  _start:
 	vmovups	%zmm29, %zmm30{%k7}	 # AVX512F
 	vmovups.s	%zmm29, %zmm30{%k7}{z}	 # AVX512F
 	vmovups	%zmm29, %zmm30{%k7}{z}	 # AVX512F
+
 	.intel_syntax noprefix
 	vmovapd.s	zmm30, zmm29	 # AVX512F
 	vmovapd	zmm30, zmm29	 # AVX512F
--- a/opcodes/i386-dis-evex-w.h
+++ b/opcodes/i386-dis-evex-w.h
@@ -294,7 +294,7 @@ 
   /* EVEX_W_0FD6_P_2 */
   {
     { Bad_Opcode },
-    { "vmovq",	{ EXxmm_mq, XMScalar }, 0 },
+    { "vmovq",	{ EXqVexScalarS, XMScalar }, 0 },
   },
   /* EVEX_W_0FE6_P_1 */
   {
--- a/opcodes/i386-dis.c
+++ b/opcodes/i386-dis.c
@@ -386,7 +386,6 @@  fetch_data (struct disassemble_info *inf
 #define EXd { OP_EX, d_mode }
 #define EXdS { OP_EX, d_swap_mode }
 #define EXq { OP_EX, q_mode }
-#define EXqScalarS { OP_EX, q_scalar_swap_mode }
 #define EXqS { OP_EX, q_swap_mode }
 #define EXx { OP_EX, x_mode }
 #define EXxS { OP_EX, x_swap_mode }
@@ -9498,7 +9497,7 @@  static const struct dis386 vex_len_table
 
   /* VEX_LEN_0FD6_P_2 */
   {
-    { "vmovq",		{ EXqScalarS, XMScalar }, 0 },
+    { "vmovq",		{ EXqVexScalarS, XMScalar }, 0 },
   },
 
   /* VEX_LEN_0FF7_P_2 */