[4/4] x86: CVTPI2PD has special behavior

Message ID 88ae58d7-190b-2a9e-ea8d-c5554367aefe@suse.com
State New
Headers show
Series
  • x86: some adjustments to handling of -mx86-used-note=yes
Related show

Commit Message

Alan Modra via Binutils Feb. 15, 2021, 1:38 p.m.
CVTPI2PD with a memory operand, unlike CVTPI2PS, doesn't engage MMX
logic. Therefore it
- has a proper AVX equivalent (CVTDQ2PD) and hence can be subject to
  SSE2AVX translation and SSE checking,
- should not record MMX use in the respective ELF note.

gas/
2021-02-XX  Jan Beulich  <jbeulich@suse.com>

	* testsuite/gas/i386/sse-check.s,
	testsuite/gas/i386/sse2avx.s,
	testsuite/gas/i386/x86-64-sse2avx.s: Add CVTPI2PD cases.
	* testsuite/gas/i386/sse-check-error.l,
	testsuite/gas/i386/sse-check-warn.e,
	testsuite/gas/i386/sse-check.d,
	testsuite/gas/i386/sse2avx.d,
	testsuite/gas/i386/x86-64-sse-check-error.l,
	testsuite/gas/i386/x86-64-sse2avx.d: Adjust expecations.
	* testsuite/gas/i386/property-cvtpi2pd.s,
	testsuite/gas/i386/property-cvtpi2pd.d,
	testsuite/gas/i386/property-cvtpi2ps.s,
	testsuite/gas/i386/property-cvtpi2ps.d: New.
	* testsuite/gas/i386/i386.exp: Run new tests.

opcodes/
2021-02-XX  Jan Beulich  <jbeulich@suse.com>

	* i386-opc.tbl: Split CVTPI2PD template. Add SSE2AVX variant.
	* i386-tbl.h: Re-generate.

Patch

--- a/gas/testsuite/gas/i386/i386.exp
+++ b/gas/testsuite/gas/i386/i386.exp
@@ -725,6 +725,8 @@  if {[is_elf_format] || [istarget "*-*-vx
     run_dump_test "property-11"
     run_dump_test "property-12"
     run_dump_test "property-13"
+    run_dump_test "property-cvtpi2pd"
+    run_dump_test "property-cvtpi2ps"
     run_dump_test "property-ldmxcsr"
     run_dump_test "property-vldmxcsr"
     run_dump_test "property-vzeroall"
--- /dev/null
+++ b/gas/testsuite/gas/i386/property-cvtpi2pd.d
@@ -0,0 +1,9 @@ 
+#name: i386 property cvtpi2pd
+#as: -mx86-used-note=yes --generate-missing-build-notes=no
+#readelf: -n
+
+Displaying notes found in: .note.gnu.property
+[ 	]+Owner[ 	]+Data size[ 	]+Description
+  GNU                  0x[0-9a-f]+	NT_GNU_PROPERTY_TYPE_0
+      Properties: x86 ISA used: x86-64-baseline
+	x86 feature used: x86, XMM
--- /dev/null
+++ b/gas/testsuite/gas/i386/property-cvtpi2pd.s
@@ -0,0 +1,2 @@ 
+	.text
+	cvtpi2pd (%eax), %xmm0
--- /dev/null
+++ b/gas/testsuite/gas/i386/property-cvtpi2ps.d
@@ -0,0 +1,9 @@ 
+#name: i386 property cvtpi2ps
+#as: -mx86-used-note=yes --generate-missing-build-notes=no
+#readelf: -n
+
+Displaying notes found in: .note.gnu.property
+[ 	]+Owner[ 	]+Data size[ 	]+Description
+  GNU                  0x[0-9a-f]+	NT_GNU_PROPERTY_TYPE_0
+      Properties: x86 ISA used: x86-64-baseline
+	x86 feature used: x86, MMX, XMM
--- /dev/null
+++ b/gas/testsuite/gas/i386/property-cvtpi2ps.s
@@ -0,0 +1,2 @@ 
+	.text
+	cvtpi2ps (%eax), %xmm0
--- a/gas/testsuite/gas/i386/sse-check-error.l
+++ b/gas/testsuite/gas/i386/sse-check-error.l
@@ -1,14 +1,15 @@ 
 .*: Assembler messages:
 .*:7: Error: .*
 .*:10: Error: .*
-.*:13: Error: .*
-.*:16: Error: .*
-.*:19: Error: .*
+.*:14: Error: .*
+.*:17: Error: .*
 .*:20: Error: .*
-.*:26: Error: .*
-.*:29: Error: .*
-.*:32: Error: .*
-.*:35: Error: .*
+.*:23: Error: .*
+.*:24: Error: .*
+.*:30: Error: .*
+.*:33: Error: .*
+.*:36: Error: .*
+.*:39: Error: .*
 GAS LISTING .*
 
 
@@ -26,49 +27,55 @@  GAS LISTING .*
 [ 	]*10[ 	]+\?\?\?\? 660F58CA 		addpd %xmm2,%xmm1
 .*  Error: SSE instruction `addpd' is used
 [ 	]*11[ 	]+
-[ 	]*12[ 	]+\# SSE3 instruction
-[ 	]*13[ 	]+\?\?\?\? 660FD0CA 		addsubpd %xmm2,%xmm1
+[ 	]*[0-9]+[ 	]+# special case SSE2 instruction
+[ 	]*[0-9]+[ 	]+\?\?\?\? 660F2ACA 		cvtpi2pd %mm2,%xmm1
+[ 	]*[0-9]+[ 	]+\?\?\?\? 660F2A0A 		cvtpi2pd \(%edx\),%xmm1
+.*  Error: SSE instruction `cvtpi2pd' is used
+[ 	]*[0-9]+[ 	]+
+[ 	]*[0-9]+[ 	]+\# SSE3 instruction
+[ 	]*[0-9]+[ 	]+\?\?\?\? 660FD0CA 		addsubpd %xmm2,%xmm1
 .*  Error: SSE instruction `addsubpd' is used
-[ 	]*14[ 	]+
-[ 	]*15[ 	]+\# SSSE3 instruction
-[ 	]*16[ 	]+\?\?\?\? 660F3801 		phaddw %xmm2,%xmm1
+[ 	]*[0-9]+[ 	]+
+[ 	]*[0-9]+[ 	]+\# SSSE3 instruction
+[ 	]*[0-9]+[ 	]+\?\?\?\? 660F3801 		phaddw %xmm2,%xmm1
 .*  Error: SSE instruction `phaddw' is used
-[ 	]*16[ 	]+CA
-[ 	]*17[ 	]+
-[ 	]*18[ 	]+\# SSE4 instructions
-[ 	]*19[ 	]+\?\?\?\? 660F3815 		blendvpd %xmm0,%xmm1,%xmm0
+[ 	]*[0-9]+[ 	]+CA
+[ 	]*[0-9]+[ 	]+
+[ 	]*[0-9]+[ 	]+\# SSE4 instructions
+[ 	]*[0-9]+[ 	]+\?\?\?\? 660F3815 		blendvpd %xmm0,%xmm1,%xmm0
 .*  Error: SSE instruction `blendvpd' is used
-[ 	]*19[ 	]+C1
-[ 	]*20[ 	]+\?\?\?\? 660F3837 		pcmpgtq %xmm1,%xmm0
+[ 	]*[0-9]+[ 	]+C1
+[ 	]*[0-9]+[ 	]+\?\?\?\? 660F3837 		pcmpgtq %xmm1,%xmm0
 .*  Error: SSE instruction `pcmpgtq' is used
-[ 	]*20[ 	]+C1
-[ 	]*21[ 	]+
-[ 	]*22[ 	]+\# SSE4a instruction.*
-[ 	]*23[ 	]+\?\?\?\? 660F78C0 		extrq \$0, \$0, %xmm0
-[ 	]*23[ 	]+0000
-[ 	]*24[ 	]+
-[ 	]*25[ 	]+\# PCMUL instruction
-[ 	]*26[ 	]+\?\?\?\? 660F3A44 		pclmulqdq \$-1,%xmm1,%xmm2
+[ 	]*[0-9]+[ 	]+C1
+[ 	]*[0-9]+[ 	]+
+[ 	]*[0-9]+[ 	]+\# SSE4a instruction.*
+[ 	]*[0-9]+[ 	]+\?\?\?\? 660F78C0 		extrq \$0, \$0, %xmm0
+[ 	]*[0-9]+[ 	]+0000
+[ 	]*[0-9]+[ 	]+
+[ 	]*[0-9]+[ 	]+\# PCMUL instruction
+[ 	]*[0-9]+[ 	]+\?\?\?\? 660F3A44 		pclmulqdq \$-1,%xmm1,%xmm2
 .*  Error: SSE instruction `pclmulqdq' is used
-[ 	]*26[ 	]+D1FF
-[ 	]*27[ 	]+
-[ 	]*28[ 	]+\# AES instructions
-[ 	]*29[ 	]+\?\?\?\? 660F38DE 		aesdec %xmm1,%xmm2
+[ 	]*[0-9]+[ 	]+D1FF
+[ 	]*[0-9]+[ 	]+
+[ 	]*[0-9]+[ 	]+\# AES instructions
+[ 	]*[0-9]+[ 	]+\?\?\?\? 660F38DE 		aesdec %xmm1,%xmm2
 .*  Error: SSE instruction `aesdec' is used
-[ 	]*29[ 	]+D1
-[ 	]*30[ 	]+
-[ 	]*31[ 	]+\# SHA instruction
-[ 	]*32[ 	]+\?\?\?\? 0F38C8C0 		sha1nexte %xmm0, %xmm0
+[ 	]*[0-9]+[ 	]+D1
+[ 	]*[0-9]+[ 	]+
+[ 	]*[0-9]+[ 	]+\# SHA instruction
+[ 	]*[0-9]+[ 	]+\?\?\?\? 0F38C8C0 		sha1nexte %xmm0, %xmm0
 .*  Error: SSE instruction `sha1nexte' is used
-[ 	]*33[ 	]+
-[ 	]*34[ 	]+\# GFNI instructions
-[ 	]*35[ 	]+\?\?\?\? 660F38CF 		gf2p8mulb %xmm1,%xmm2
+[ 	]*[0-9]+[ 	]+
+[ 	]*[0-9]+[ 	]+\# GFNI instructions
+[ 	]*[0-9]+[ 	]+\?\?\?\? 660F38CF 		gf2p8mulb %xmm1,%xmm2
 .*  Error: SSE instruction `gf2p8mulb' is used
-[ 	]*35[ 	]+D1
-[ 	]*36[ 	]+\?\?\?\? 62F27D09 		vgf2p8mulb %xmm0, %xmm0, %xmm0\{%k1\}
-[ 	]*36[ 	]+CFC0
-[ 	]*37[ 	]+\?\?\?\? 62F27D48 		vgf2p8mulb %zmm0, %zmm0, %zmm0
-[ 	]*37[ 	]+CFC0
 GAS LISTING .*
 
 
+[ 	]*[0-9]+[ 	]+D1
+[ 	]*[0-9]+[ 	]+\?\?\?\? 62F27D09 		vgf2p8mulb %xmm0, %xmm0, %xmm0\{%k1\}
+[ 	]*[0-9]+[ 	]+CFC0
+[ 	]*[0-9]+[ 	]+\?\?\?\? 62F27D48 		vgf2p8mulb %zmm0, %zmm0, %zmm0
+[ 	]*[0-9]+[ 	]+CFC0
+
--- a/gas/testsuite/gas/i386/sse-check-warn.e
+++ b/gas/testsuite/gas/i386/sse-check-warn.e
@@ -1,11 +1,12 @@ 
 .*: Assembler messages:
 .*:7: Warning: SSE instruction `addps' is used
 .*:10: Warning: SSE instruction `addpd' is used
-.*:13: Warning: SSE instruction `addsubpd' is used
-.*:16: Warning: SSE instruction `phaddw' is used
-.*:19: Warning: SSE instruction `blendvpd' is used
-.*:20: Warning: SSE instruction `pcmpgtq' is used
-.*:26: Warning: SSE instruction `pclmulqdq' is used
-.*:29: Warning: SSE instruction `aesdec' is used
-.*:32: Warning: SSE instruction `sha1nexte' is used
-.*:35: Warning: SSE instruction `gf2p8mulb' is used
+.*:14: Warning: SSE instruction `cvtpi2pd' is used
+.*:17: Warning: SSE instruction `addsubpd' is used
+.*:20: Warning: SSE instruction `phaddw' is used
+.*:23: Warning: SSE instruction `blendvpd' is used
+.*:24: Warning: SSE instruction `pcmpgtq' is used
+.*:30: Warning: SSE instruction `pclmulqdq' is used
+.*:33: Warning: SSE instruction `aesdec' is used
+.*:36: Warning: SSE instruction `sha1nexte' is used
+.*:39: Warning: SSE instruction `gf2p8mulb' is used
--- a/gas/testsuite/gas/i386/sse-check.d
+++ b/gas/testsuite/gas/i386/sse-check.d
@@ -9,6 +9,8 @@  Disassembly of section .text:
 0+ <_start>:
 [ 	]*[a-f0-9]+:	0f 58 ca             	addps  %xmm2,%xmm1
 [ 	]*[a-f0-9]+:	66 0f 58 ca          	addpd  %xmm2,%xmm1
+[ 	]*[a-f0-9]+:	66 0f 2a ca          	cvtpi2pd %mm2,%xmm1
+[ 	]*[a-f0-9]+:	(67 )?66 0f 2a 0a(   )?       	cvtpi2pd \(%edx\),%xmm1
 [ 	]*[a-f0-9]+:	66 0f d0 ca          	addsubpd %xmm2,%xmm1
 [ 	]*[a-f0-9]+:	66 0f 38 01 ca       	phaddw %xmm2,%xmm1
 [ 	]*[a-f0-9]+:	66 0f 38 15 c1       	blendvpd %xmm0,%xmm1,%xmm0
--- a/gas/testsuite/gas/i386/sse-check.s
+++ b/gas/testsuite/gas/i386/sse-check.s
@@ -9,6 +9,10 @@  _start:
 # SSE2 instruction
 	addpd %xmm2,%xmm1
 
+# special case SSE2 instruction
+	cvtpi2pd %mm2,%xmm1
+	cvtpi2pd (%edx),%xmm1
+
 # SSE3 instruction
 	addsubpd %xmm2,%xmm1
 
--- a/gas/testsuite/gas/i386/sse2avx.d
+++ b/gas/testsuite/gas/i386/sse2avx.d
@@ -408,6 +408,7 @@  Disassembly of section .text:
 [ 	]*[a-f0-9]+:	c5 f9 2f 21          	vcomisd \(%ecx\),%xmm4
 [ 	]*[a-f0-9]+:	c5 fa e6 f4          	vcvtdq2pd %xmm4,%xmm6
 [ 	]*[a-f0-9]+:	c5 fa e6 21          	vcvtdq2pd \(%ecx\),%xmm4
+[ 	]*[a-f0-9]+:	c5 fa e6 21          	vcvtdq2pd \(%ecx\),%xmm4
 [ 	]*[a-f0-9]+:	c5 f8 5a f4          	vcvtps2pd %xmm4,%xmm6
 [ 	]*[a-f0-9]+:	c5 f8 5a 21          	vcvtps2pd \(%ecx\),%xmm4
 [ 	]*[a-f0-9]+:	c5 fb 12 f4          	vmovddup %xmm4,%xmm6
@@ -986,6 +987,7 @@  Disassembly of section .text:
 [ 	]*[a-f0-9]+:	c5 f9 2f 21          	vcomisd \(%ecx\),%xmm4
 [ 	]*[a-f0-9]+:	c5 fa e6 f4          	vcvtdq2pd %xmm4,%xmm6
 [ 	]*[a-f0-9]+:	c5 fa e6 21          	vcvtdq2pd \(%ecx\),%xmm4
+[ 	]*[a-f0-9]+:	c5 fa e6 21          	vcvtdq2pd \(%ecx\),%xmm4
 [ 	]*[a-f0-9]+:	c5 f8 5a f4          	vcvtps2pd %xmm4,%xmm6
 [ 	]*[a-f0-9]+:	c5 f8 5a 21          	vcvtps2pd \(%ecx\),%xmm4
 [ 	]*[a-f0-9]+:	c5 fb 12 f4          	vmovddup %xmm4,%xmm6
--- a/gas/testsuite/gas/i386/sse2avx.s
+++ b/gas/testsuite/gas/i386/sse2avx.s
@@ -425,6 +425,7 @@  _start:
 	comisd (%ecx),%xmm4
 	cvtdq2pd %xmm4,%xmm6
 	cvtdq2pd (%ecx),%xmm4
+	cvtpi2pd (%ecx),%xmm4
 	cvtps2pd %xmm4,%xmm6
 	cvtps2pd (%ecx),%xmm4
 	movddup %xmm4,%xmm6
@@ -1086,6 +1087,7 @@  _start:
 	comisd xmm4,QWORD PTR [ecx]
 	cvtdq2pd xmm6,xmm4
 	cvtdq2pd xmm4,QWORD PTR [ecx]
+	cvtpi2pd xmm4,QWORD PTR [ecx]
 	cvtps2pd xmm6,xmm4
 	cvtps2pd xmm4,QWORD PTR [ecx]
 	movddup xmm6,xmm4
--- a/gas/testsuite/gas/i386/x86-64-sse-check-error.l
+++ b/gas/testsuite/gas/i386/x86-64-sse-check-error.l
@@ -1,14 +1,15 @@ 
 .*: Assembler messages:
 .*:7: Error: .*
 .*:10: Error: .*
-.*:13: Error: .*
-.*:16: Error: .*
-.*:19: Error: .*
+.*:14: Error: .*
+.*:17: Error: .*
 .*:20: Error: .*
-.*:26: Error: .*
-.*:29: Error: .*
-.*:32: Error: .*
-.*:35: Error: .*
+.*:23: Error: .*
+.*:24: Error: .*
+.*:30: Error: .*
+.*:33: Error: .*
+.*:36: Error: .*
+.*:39: Error: .*
 GAS LISTING .*
 
 
@@ -26,49 +27,56 @@  GAS LISTING .*
 [ 	]*10[ 	]+\?\?\?\? 660F58CA 		addpd %xmm2,%xmm1
 .*  Error: SSE instruction `addpd' is used
 [ 	]*11[ 	]+
-[ 	]*12[ 	]+\# SSE3 instruction
-[ 	]*13[ 	]+\?\?\?\? 660FD0CA 		addsubpd %xmm2,%xmm1
+[ 	]*[0-9]+[ 	]+# special case SSE2 instruction
+[ 	]*[0-9]+[ 	]+\?\?\?\? 660F2ACA 		cvtpi2pd %mm2,%xmm1
+[ 	]*[0-9]+[ 	]+\?\?\?\? 67660F2A 		cvtpi2pd \(%edx\),%xmm1
+.*  Error: SSE instruction `cvtpi2pd' is used
+[ 	]*[0-9]+[ 	]+0A
+[ 	]*[0-9]+[ 	]+
+[ 	]*[0-9]+[ 	]+\# SSE3 instruction
+[ 	]*[0-9]+[ 	]+\?\?\?\? 660FD0CA 		addsubpd %xmm2,%xmm1
 .*  Error: SSE instruction `addsubpd' is used
-[ 	]*14[ 	]+
-[ 	]*15[ 	]+\# SSSE3 instruction
-[ 	]*16[ 	]+\?\?\?\? 660F3801 		phaddw %xmm2,%xmm1
+[ 	]*[0-9]+[ 	]+
+[ 	]*[0-9]+[ 	]+\# SSSE3 instruction
+[ 	]*[0-9]+[ 	]+\?\?\?\? 660F3801 		phaddw %xmm2,%xmm1
 .*  Error: SSE instruction `phaddw' is used
-[ 	]*16[ 	]+CA
-[ 	]*17[ 	]+
-[ 	]*18[ 	]+\# SSE4 instructions
-[ 	]*19[ 	]+\?\?\?\? 660F3815 		blendvpd %xmm0,%xmm1,%xmm0
+[ 	]*[0-9]+[ 	]+CA
+[ 	]*[0-9]+[ 	]+
+[ 	]*[0-9]+[ 	]+\# SSE4 instructions
+[ 	]*[0-9]+[ 	]+\?\?\?\? 660F3815 		blendvpd %xmm0,%xmm1,%xmm0
 .*  Error: SSE instruction `blendvpd' is used
-[ 	]*19[ 	]+C1
-[ 	]*20[ 	]+\?\?\?\? 660F3837 		pcmpgtq %xmm1,%xmm0
+[ 	]*[0-9]+[ 	]+C1
+[ 	]*[0-9]+[ 	]+\?\?\?\? 660F3837 		pcmpgtq %xmm1,%xmm0
 .*  Error: SSE instruction `pcmpgtq' is used
-[ 	]*20[ 	]+C1
-[ 	]*21[ 	]+
-[ 	]*22[ 	]+\# SSE4a instruction.*
-[ 	]*23[ 	]+\?\?\?\? 660F78C0 		extrq \$0, \$0, %xmm0
-[ 	]*23[ 	]+0000
-[ 	]*24[ 	]+
-[ 	]*25[ 	]+\# PCMUL instruction
-[ 	]*26[ 	]+\?\?\?\? 660F3A44 		pclmulqdq \$-1,%xmm1,%xmm2
+[ 	]*[0-9]+[ 	]+C1
+[ 	]*[0-9]+[ 	]+
+[ 	]*[0-9]+[ 	]+\# SSE4a instruction.*
+[ 	]*[0-9]+[ 	]+\?\?\?\? 660F78C0 		extrq \$0, \$0, %xmm0
+[ 	]*[0-9]+[ 	]+0000
+[ 	]*[0-9]+[ 	]+
+[ 	]*[0-9]+[ 	]+\# PCMUL instruction
+[ 	]*[0-9]+[ 	]+\?\?\?\? 660F3A44 		pclmulqdq \$-1,%xmm1,%xmm2
 .*  Error: SSE instruction `pclmulqdq' is used
-[ 	]*26[ 	]+D1FF
-[ 	]*27[ 	]+
-[ 	]*28[ 	]+\# AES instructions
-[ 	]*29[ 	]+\?\?\?\? 660F38DE 		aesdec %xmm1,%xmm2
+[ 	]*[0-9]+[ 	]+D1FF
+[ 	]*[0-9]+[ 	]+
+[ 	]*[0-9]+[ 	]+\# AES instructions
+[ 	]*[0-9]+[ 	]+\?\?\?\? 660F38DE 		aesdec %xmm1,%xmm2
 .*  Error: SSE instruction `aesdec' is used
-[ 	]*29[ 	]+D1
-[ 	]*30[ 	]+
-[ 	]*31[ 	]+\# SHA instruction
-[ 	]*32[ 	]+\?\?\?\? 0F38C8C0 		sha1nexte %xmm0, %xmm0
+[ 	]*[0-9]+[ 	]+D1
+[ 	]*[0-9]+[ 	]+
+[ 	]*[0-9]+[ 	]+\# SHA instruction
+[ 	]*[0-9]+[ 	]+\?\?\?\? 0F38C8C0 		sha1nexte %xmm0, %xmm0
 .*  Error: SSE instruction `sha1nexte' is used
-[ 	]*33[ 	]+
-[ 	]*34[ 	]+\# GFNI instructions
-[ 	]*35[ 	]+\?\?\?\? 660F38CF 		gf2p8mulb %xmm1,%xmm2
-.*  Error: SSE instruction `gf2p8mulb' is used
-[ 	]*35[ 	]+D1
-[ 	]*36[ 	]+\?\?\?\? 62F27D09 		vgf2p8mulb %xmm0, %xmm0, %xmm0\{%k1\}
-[ 	]*36[ 	]+CFC0
-[ 	]*37[ 	]+\?\?\?\? 62F27D48 		vgf2p8mulb %zmm0, %zmm0, %zmm0
-[ 	]*37[ 	]+CFC0
+[ 	]*[0-9]+[ 	]+
+[ 	]*[0-9]+[ 	]+\# GFNI instructions
+[ 	]*[0-9]+[ 	]+\?\?\?\? 660F38CF 		gf2p8mulb %xmm1,%xmm2
 GAS LISTING .*
 
 
+.*  Error: SSE instruction `gf2p8mulb' is used
+[ 	]*[0-9]+[ 	]+D1
+[ 	]*[0-9]+[ 	]+\?\?\?\? 62F27D09 		vgf2p8mulb %xmm0, %xmm0, %xmm0\{%k1\}
+[ 	]*[0-9]+[ 	]+CFC0
+[ 	]*[0-9]+[ 	]+\?\?\?\? 62F27D48 		vgf2p8mulb %zmm0, %zmm0, %zmm0
+[ 	]*[0-9]+[ 	]+CFC0
+
--- a/gas/testsuite/gas/i386/x86-64-sse2avx.d
+++ b/gas/testsuite/gas/i386/x86-64-sse2avx.d
@@ -474,6 +474,7 @@  Disassembly of section .text:
 [ 	]*[a-f0-9]+:	c5 f9 2f 21          	vcomisd \(%rcx\),%xmm4
 [ 	]*[a-f0-9]+:	c5 fa e6 f4          	vcvtdq2pd %xmm4,%xmm6
 [ 	]*[a-f0-9]+:	c5 fa e6 21          	vcvtdq2pd \(%rcx\),%xmm4
+[ 	]*[a-f0-9]+:	c5 fa e6 21          	vcvtdq2pd \(%rcx\),%xmm4
 [ 	]*[a-f0-9]+:	c5 f8 5a f4          	vcvtps2pd %xmm4,%xmm6
 [ 	]*[a-f0-9]+:	c5 f8 5a 21          	vcvtps2pd \(%rcx\),%xmm4
 [ 	]*[a-f0-9]+:	c5 fb 12 f4          	vmovddup %xmm4,%xmm6
@@ -1137,6 +1138,7 @@  Disassembly of section .text:
 [ 	]*[a-f0-9]+:	c5 f9 2f 21          	vcomisd \(%rcx\),%xmm4
 [ 	]*[a-f0-9]+:	c5 fa e6 f4          	vcvtdq2pd %xmm4,%xmm6
 [ 	]*[a-f0-9]+:	c5 fa e6 21          	vcvtdq2pd \(%rcx\),%xmm4
+[ 	]*[a-f0-9]+:	c5 fa e6 21          	vcvtdq2pd \(%rcx\),%xmm4
 [ 	]*[a-f0-9]+:	c5 f8 5a f4          	vcvtps2pd %xmm4,%xmm6
 [ 	]*[a-f0-9]+:	c5 f8 5a 21          	vcvtps2pd \(%rcx\),%xmm4
 [ 	]*[a-f0-9]+:	c5 fb 12 f4          	vmovddup %xmm4,%xmm6
--- a/gas/testsuite/gas/i386/x86-64-sse2avx.s
+++ b/gas/testsuite/gas/i386/x86-64-sse2avx.s
@@ -489,6 +489,7 @@  _start:
 	comisd (%rcx),%xmm4
 	cvtdq2pd %xmm4,%xmm6
 	cvtdq2pd (%rcx),%xmm4
+	cvtpi2pd (%rcx),%xmm4
 	cvtps2pd %xmm4,%xmm6
 	cvtps2pd (%rcx),%xmm4
 	movddup %xmm4,%xmm6
@@ -1260,6 +1261,7 @@  _start:
 	comisd xmm4,QWORD PTR [rcx]
 	cvtdq2pd xmm6,xmm4
 	cvtdq2pd xmm4,QWORD PTR [rcx]
+	cvtpi2pd xmm4,QWORD PTR [rcx]
 	cvtps2pd xmm6,xmm4
 	cvtps2pd xmm4,QWORD PTR [rcx]
 	movddup xmm6,xmm4
--- a/opcodes/i386-opc.tbl
+++ b/opcodes/i386-opc.tbl
@@ -1310,7 +1310,9 @@  cmpsd, 3, 0xf2c2, None, 1, CpuAVX, Modrm
 cmpsd, 3, 0x0fc2, None, 2, CpuSSE2, Prefix_0XF2|Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Imm8, Qword|Unspecified|BaseIndex|RegXMM, RegXMM }
 comisd, 2, 0x662f, None, 1, CpuAVX, Modrm|Vex=3|OpcodePrefix=0|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM }
 comisd, 2, 0x0f2f, None, 2, CpuSSE2, Prefix_0X66|Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM }
-cvtpi2pd, 2, 0x0f2a, None, 2, CpuSSE2, Prefix_0X66|Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|NoAVX, { Qword|Unspecified|BaseIndex|RegMMX, RegXMM }
+cvtpi2pd, 2, 0x0f2a, None, 2, CpuSSE2, Prefix_0X66|Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|NoAVX, { RegMMX, RegXMM }
+cvtpi2pd, 2, 0xf3e6, None, 1, CpuAVX, Modrm|Vex|OpcodePrefix=0|VexW0|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Qword|Unspecified|BaseIndex, RegXMM }
+cvtpi2pd, 2, 0x0f2a, None, 2, CpuSSE2, Prefix_0X66|Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex, RegXMM }
 cvtsi2sd, 2, 0xf22a, None, 1, CpuAVX|CpuNo64, Modrm|Vex=3|OpcodePrefix=0|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Reg32|Dword|Unspecified|BaseIndex, RegXMM }
 cvtsi2sd, 2, 0xf22a, None, 1, CpuAVX|Cpu64, Modrm|Vex=3|OpcodePrefix=0|VexVVVV=1|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|SSE2AVX|ATTSyntax, { Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, RegXMM }
 cvtsi2sd, 2, 0xf22a, None, 1, CpuAVX|Cpu64, Modrm|Vex=3|OpcodePrefix=0|VexVVVV=1|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|SSE2AVX|IntelSyntax, { Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, RegXMM }