[DO,NOT,APPLY,11/10] x86: remaining ambiguous operand cases

Message ID 74c8aac4-1237-6054-3fde-aad28af02760@suse.com
State New
Headers show
Series
  • x86: operand size handling improvements
Related show

Commit Message

Jan Beulich Aug. 6, 2019, 2:32 p.m.
The further tests added below produce the following testsuite failures:

/home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg16.s:7: Warning: 0000000012345678 shortened to 0000000000005678
/home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg16.s:11: Warning: 0000000012345678 shortened to 0000000000005678
/home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg16.s:15: Warning: 0000000012345678 shortened to 0000000000005678
/home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg16.s:24: Warning: 0000000012345678 shortened to 0000000000005678
/home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg16.s:70: Warning: 0000000012345678 shortened to 0000000000005678
/home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg16.s:85: Warning: 0000000012345678 shortened to 0000000000005678
/home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg16.s:108: Warning: 0000000012345678 shortened to 0000000000005678
/home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg16.s:128: Warning: 0000000012345678 shortened to 0000000000005678
/home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg16.s:131: Warning: 0000000012345678 shortened to 0000000000005678
/home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg16.s:132: Error: operand size mismatch for `vcvtneps2bf16'
/home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg16.s:133: Error: operand size mismatch for `vcvtpd2dq'
/home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg16.s:134: Error: operand size mismatch for `vcvtpd2dq'
/home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg16.s:135: Error: operand size mismatch for `vcvtpd2ps'
/home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg16.s:136: Error: operand size mismatch for `vcvtpd2ps'
/home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg16.s:137: Error: operand size mismatch for `vcvtpd2udq'
/home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg16.s:138: Error: operand size mismatch for `vcvtqq2ps'
/home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg16.s:143: Error: operand size mismatch for `vcvttpd2dq'
/home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg16.s:144: Error: operand size mismatch for `vcvttpd2dq'
/home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg16.s:145: Error: operand size mismatch for `vcvttpd2udq'
/home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg16.s:146: Error: operand size mismatch for `vcvtuqq2ps'
/home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg16.s:154: Warning: 0000000012345678 shortened to 0000000000005678

/home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg32.s:131: Error: operand size mismatch for `vcvtneps2bf16'
/home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg32.s:132: Error: operand size mismatch for `vcvtpd2dq'
/home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg32.s:133: Error: operand size mismatch for `vcvtpd2dq'
/home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg32.s:134: Error: operand size mismatch for `vcvtpd2ps'
/home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg32.s:135: Error: operand size mismatch for `vcvtpd2ps'
/home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg32.s:136: Error: operand size mismatch for `vcvtpd2udq'
/home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg32.s:137: Error: operand size mismatch for `vcvtqq2ps'
/home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg32.s:142: Error: operand size mismatch for `vcvttpd2dq'
/home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg32.s:143: Error: operand size mismatch for `vcvttpd2dq'
/home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg32.s:144: Error: operand size mismatch for `vcvttpd2udq'
/home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg32.s:145: Error: operand size mismatch for `vcvtuqq2ps'

/home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg64.s:134: Error: operand size mismatch for `vcvtneps2bf16'
/home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg64.s:135: Error: operand size mismatch for `vcvtpd2dq'
/home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg64.s:136: Error: operand size mismatch for `vcvtpd2dq'
/home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg64.s:137: Error: operand size mismatch for `vcvtpd2ps'
/home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg64.s:138: Error: operand size mismatch for `vcvtpd2ps'
/home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg64.s:139: Error: operand size mismatch for `vcvtpd2udq'
/home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg64.s:140: Error: operand size mismatch for `vcvtqq2ps'
/home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg64.s:145: Error: operand size mismatch for `vcvttpd2dq'
/home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg64.s:146: Error: operand size mismatch for `vcvttpd2dq'
/home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg64.s:147: Error: operand size mismatch for `vcvttpd2udq'
/home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg64.s:148: Error: operand size mismatch for `vcvtuqq2ps'

Questions:
1) Should 32-bit immediates in 16-bit mode result in 32-bit encoding to be emitted?
    If so, what about symbol references - should we assume 16- or 32-bit addresses
    in this case?
2) Should the XMM/YMM ambiguity be resolved (if so I'd suggest to default to XMM)?

Jan

Comments

H.J. Lu Aug. 6, 2019, 7:18 p.m. | #1
On Tue, Aug 6, 2019 at 7:32 AM Jan Beulich <jbeulich@suse.com> wrote:
>

>

> The further tests added below produce the following testsuite failures:

>

> /home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg16.s:7: Warning: 0000000012345678 shortened to 0000000000005678

> /home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg16.s:11: Warning: 0000000012345678 shortened to 0000000000005678

> /home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg16.s:15: Warning: 0000000012345678 shortened to 0000000000005678

> /home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg16.s:24: Warning: 0000000012345678 shortened to 0000000000005678

> /home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg16.s:70: Warning: 0000000012345678 shortened to 0000000000005678

> /home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg16.s:85: Warning: 0000000012345678 shortened to 0000000000005678

> /home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg16.s:108: Warning: 0000000012345678 shortened to 0000000000005678

> /home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg16.s:128: Warning: 0000000012345678 shortened to 0000000000005678

> /home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg16.s:131: Warning: 0000000012345678 shortened to 0000000000005678

> /home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg16.s:132: Error: operand size mismatch for `vcvtneps2bf16'

> /home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg16.s:133: Error: operand size mismatch for `vcvtpd2dq'

> /home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg16.s:134: Error: operand size mismatch for `vcvtpd2dq'

> /home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg16.s:135: Error: operand size mismatch for `vcvtpd2ps'

> /home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg16.s:136: Error: operand size mismatch for `vcvtpd2ps'

> /home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg16.s:137: Error: operand size mismatch for `vcvtpd2udq'

> /home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg16.s:138: Error: operand size mismatch for `vcvtqq2ps'

> /home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg16.s:143: Error: operand size mismatch for `vcvttpd2dq'

> /home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg16.s:144: Error: operand size mismatch for `vcvttpd2dq'

> /home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg16.s:145: Error: operand size mismatch for `vcvttpd2udq'

> /home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg16.s:146: Error: operand size mismatch for `vcvtuqq2ps'

> /home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg16.s:154: Warning: 0000000012345678 shortened to 0000000000005678

>

> /home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg32.s:131: Error: operand size mismatch for `vcvtneps2bf16'

> /home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg32.s:132: Error: operand size mismatch for `vcvtpd2dq'

> /home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg32.s:133: Error: operand size mismatch for `vcvtpd2dq'

> /home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg32.s:134: Error: operand size mismatch for `vcvtpd2ps'

> /home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg32.s:135: Error: operand size mismatch for `vcvtpd2ps'

> /home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg32.s:136: Error: operand size mismatch for `vcvtpd2udq'

> /home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg32.s:137: Error: operand size mismatch for `vcvtqq2ps'

> /home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg32.s:142: Error: operand size mismatch for `vcvttpd2dq'

> /home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg32.s:143: Error: operand size mismatch for `vcvttpd2dq'

> /home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg32.s:144: Error: operand size mismatch for `vcvttpd2udq'

> /home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg32.s:145: Error: operand size mismatch for `vcvtuqq2ps'

>

> /home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg64.s:134: Error: operand size mismatch for `vcvtneps2bf16'

> /home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg64.s:135: Error: operand size mismatch for `vcvtpd2dq'

> /home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg64.s:136: Error: operand size mismatch for `vcvtpd2dq'

> /home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg64.s:137: Error: operand size mismatch for `vcvtpd2ps'

> /home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg64.s:138: Error: operand size mismatch for `vcvtpd2ps'

> /home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg64.s:139: Error: operand size mismatch for `vcvtpd2udq'

> /home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg64.s:140: Error: operand size mismatch for `vcvtqq2ps'

> /home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg64.s:145: Error: operand size mismatch for `vcvttpd2dq'

> /home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg64.s:146: Error: operand size mismatch for `vcvttpd2dq'

> /home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg64.s:147: Error: operand size mismatch for `vcvttpd2udq'

> /home/jbeulich/cpp/binutils/master-git/2019-06-24/gas/testsuite/gas/i386/noreg64.s:148: Error: operand size mismatch for `vcvtuqq2ps'

>

> Questions:

> 1) Should 32-bit immediates in 16-bit mode result in 32-bit encoding to be emitted?

>     If so, what about symbol references - should we assume 16- or 32-bit addresses

>     in this case?


No.  Suffix should be required in this case.

> 2) Should the XMM/YMM ambiguity be resolved (if so I'd suggest to default to XMM)?


No.  Suffix should be required in this case.

H.J.

Patch

--- a/gas/testsuite/gas/i386/noreg16.s
+++ b/gas/testsuite/gas/i386/noreg16.s
@@ -4,12 +4,15 @@  noreg:
  	adc	$1, (%bx)
  	adc	$0x89, (%bx)
  	adc	$0x1234, (%bx)
+	adc	$0x12345678, (%bx)
  	add	$1, (%bx)
  	add	$0x89, (%bx)
  	add	$0x1234, (%bx)
+	add	$0x12345678, (%bx)
  	and	$1, (%bx)
  	and	$0x89, (%bx)
  	and	$0x1234, (%bx)
+	and	$0x12345678, (%bx)
  	bt	$1, (%bx)
  	btc	$1, (%bx)
  	btr	$1, (%bx)
@@ -18,6 +21,7 @@  noreg:
  	cmp	$1, (%bx)
  	cmp	$0x89, (%bx)
  	cmp	$0x1234, (%bx)
+	cmp	$0x12345678, (%bx)
  	cmps
  	cmps	%es:(%edi), (%esi)
  	crc32	(%bx), %eax
@@ -63,6 +67,7 @@  noreg:
  	ltr	(%bx)
  	mov	$0x12, (%bx)
  	mov	$0x1234, (%bx)
+	mov	$0x12345678, (%bx)
  	mov	%es, (%bx)
  	mov	(%bx), %es
  	movs
@@ -77,6 +82,7 @@  noreg:
  	or	$1, (%bx)
  	or	$0x89, (%bx)
  	or	$0x1234, (%bx)
+	or	$0x12345678, (%bx)
  	outs
  	outs	(%esi), %dx
  	pop	(%bx)
@@ -99,6 +105,7 @@  noreg:
  	sbb	$1, (%bx)
  	sbb	$0x89, (%bx)
  	sbb	$0x1234, (%bx)
+	sbb	$0x12345678, (%bx)
  	scas
  	scas	%es:(%edi)
  	sal	$1, (%bx)
@@ -118,12 +125,25 @@  noreg:
  	sub	$1, (%bx)
  	sub	$0x89, (%bx)
  	sub	$0x1234, (%bx)
+	sub	$0x12345678, (%bx)
  	test	$0x89, (%bx)
  	test	$0x1234, (%bx)
+	test	$0x12345678, (%bx)
+	vcvtneps2bf16 (%bx), %xmm0
+	vcvtpd2dq (%bx), %xmm0
+	vcvtpd2dq (%bx), %xmm0{%k1}
+	vcvtpd2ps (%bx), %xmm0
+	vcvtpd2ps (%bx), %xmm0{%k1}
+	vcvtpd2udq (%bx), %xmm0
+	vcvtqq2ps (%bx), %xmm0
  	vcvtsi2sd (%bx), %xmm0, %xmm0
  	{evex} vcvtsi2sd (%bx), %xmm0, %xmm0
  	vcvtsi2ss (%bx), %xmm0, %xmm0
  	{evex} vcvtsi2ss (%bx), %xmm0, %xmm0
+	vcvttpd2dq (%bx), %xmm0
+	vcvttpd2dq (%bx), %xmm0{%k1}
+	vcvttpd2udq (%bx), %xmm0
+	vcvtuqq2ps (%bx), %xmm0
  	vcvtusi2sd (%bx), %xmm0, %xmm0
  	vcvtusi2ss (%bx), %xmm0, %xmm0
  	vfpclasspd $0, (%bx), %k0
@@ -131,3 +151,4 @@  noreg:
  	xor	$1, (%bx)
  	xor	$0x89, (%bx)
  	xor	$0x1234, (%bx)
+	xor	$0x12345678, (%bx)
--- a/gas/testsuite/gas/i386/noreg32.s
+++ b/gas/testsuite/gas/i386/noreg32.s
@@ -128,10 +128,21 @@  noreg:
  	test	$0x89, (%eax)
  	test	$0x1234, (%eax)
  	test	$0x12345678, (%eax)
+	vcvtneps2bf16 (%eax), %xmm0
+	vcvtpd2dq (%eax), %xmm0
+	vcvtpd2dq (%eax), %xmm0{%k1}
+	vcvtpd2ps (%eax), %xmm0
+	vcvtpd2ps (%eax), %xmm0{%k1}
+	vcvtpd2udq (%eax), %xmm0
+	vcvtqq2ps (%eax), %xmm0
  	vcvtsi2sd (%eax), %xmm0, %xmm0
  	{evex} vcvtsi2sd (%eax), %xmm0, %xmm0
  	vcvtsi2ss (%eax), %xmm0, %xmm0
  	{evex} vcvtsi2ss (%eax), %xmm0, %xmm0
+	vcvttpd2dq (%eax), %xmm0
+	vcvttpd2dq (%eax), %xmm0{%k1}
+	vcvttpd2udq (%eax), %xmm0
+	vcvtuqq2ps (%eax), %xmm0
  	vcvtusi2sd (%eax), %xmm0, %xmm0
  	vcvtusi2ss (%eax), %xmm0, %xmm0
  	vfpclasspd $0, (%eax), %k0
--- a/gas/testsuite/gas/i386/noreg64.s
+++ b/gas/testsuite/gas/i386/noreg64.s
@@ -131,10 +131,21 @@  noreg:
  	test	$0x89, (%rax)
  	test	$0x1234, (%rax)
  	test	$0x12345678, (%rax)
+	vcvtneps2bf16 (%rax), %xmm0
+	vcvtpd2dq (%rax), %xmm0
+	vcvtpd2dq (%rax), %xmm0{%k1}
+	vcvtpd2ps (%rax), %xmm0
+	vcvtpd2ps (%rax), %xmm0{%k1}
+	vcvtpd2udq (%rax), %xmm0
+	vcvtqq2ps (%rax), %xmm0
  	vcvtsi2sd (%rax), %xmm0, %xmm0
  	vcvtsi2sd (%rax), %xmm0, %xmm31
  	vcvtsi2ss (%rax), %xmm0, %xmm0
  	vcvtsi2ss (%rax), %xmm0, %xmm31
+	vcvttpd2dq (%rax), %xmm0
+	vcvttpd2dq (%rax), %xmm0{%k1}
+	vcvttpd2udq (%rax), %xmm0
+	vcvtuqq2ps (%rax), %xmm0
  	vcvtusi2sd (%rax), %xmm0, %xmm0
  	vcvtusi2ss (%rax), %xmm0, %xmm0
  	vfpclasspd $0, (%rax), %k0