re PR target/42165 (-masm=intel doesn't know how to print AVX instructions)

PR target/42165
	* config/i386/i386.c (print_operand): For 32-byte memory use
	YMMWORD in -masm=intel mode.  Use TBYTE instead of XWORD.
	* config/i386/i386.md (crc32modesuffix): Expand to nothing
	in -masm=intel mode.
	(sse4_2_crc32di): Print just crc32 instead of crc32q in
	-masm=intel mode.
	* config/i386/mmx.md (*mmx_pinsrw): Print correct size of
	memory operand in -masm=intel mode.
	* config/i386/sse.md (*avx_pinsr<ssevecsize>, *sse4_1_pinsrb,
	*sse2_pinsrw): Likewise.
	(sse_cvtss2siq, sse_cvtss2siq_2, sse_cvttss2siq): Don't print
	q suffix in -masm=intel mode.

From-SVN: r154655
This commit is contained in:
Jakub Jelinek 2009-11-25 21:54:12 +01:00 committed by Jakub Jelinek
parent eebe23c290
commit 239130b7a8
5 changed files with 40 additions and 11 deletions

View File

@ -1,3 +1,19 @@
2009-11-25 Jakub Jelinek <jakub@redhat.com>
PR target/42165
* config/i386/i386.c (print_operand): For 32-byte memory use
YMMWORD in -masm=intel mode. Use TBYTE instead of XWORD.
* config/i386/i386.md (crc32modesuffix): Expand to nothing
in -masm=intel mode.
(sse4_2_crc32di): Print just crc32 instead of crc32q in
-masm=intel mode.
* config/i386/mmx.md (*mmx_pinsrw): Print correct size of
memory operand in -masm=intel mode.
* config/i386/sse.md (*avx_pinsr<ssevecsize>, *sse4_1_pinsrb,
*sse2_pinsrw): Likewise.
(sse_cvtss2siq, sse_cvtss2siq_2, sse_cvttss2siq): Don't print
q suffix in -masm=intel mode.
2009-11-24 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
* pa.c (output_call): Only use sr4 for long interspace calls if

View File

@ -11313,13 +11313,14 @@ print_operand (FILE *file, rtx x, int code)
case 2: size = "WORD"; break;
case 4: size = "DWORD"; break;
case 8: size = "QWORD"; break;
case 12: size = "XWORD"; break;
case 12: size = "TBYTE"; break;
case 16:
if (GET_MODE (x) == XFmode)
size = "XWORD";
size = "TBYTE";
else
size = "XMMWORD";
break;
case 32: size = "YMMWORD"; break;
default:
gcc_unreachable ();
}

View File

@ -21936,7 +21936,7 @@
[(set_attr "type" "multi")])
(define_mode_iterator CRC32MODE [QI HI SI])
(define_mode_attr crc32modesuffix [(QI "b") (HI "w") (SI "l")])
(define_mode_attr crc32modesuffix [(QI "{b}") (HI "{w}") (SI "{l}")])
(define_mode_attr crc32modeconstraint [(QI "qm") (HI "rm") (SI "rm")])
(define_insn "sse4_2_crc32<mode>"
@ -21959,7 +21959,7 @@
(match_operand:DI 2 "nonimmediate_operand" "rm")]
UNSPEC_CRC32))]
"TARGET_SSE4_2 && TARGET_64BIT"
"crc32q\t{%2, %0|%0, %2}"
"crc32{q}\t{%2, %0|%0, %2}"
[(set_attr "type" "sselog1")
(set_attr "prefix_rep" "1")
(set_attr "prefix_extra" "1")

View File

@ -1202,7 +1202,10 @@
"TARGET_SSE || TARGET_3DNOW_A"
{
operands[3] = GEN_INT (exact_log2 (INTVAL (operands[3])));
return "pinsrw\t{%3, %k2, %0|%0, %k2, %3}";
if (MEM_P (operands[2]))
return "pinsrw\t{%3, %2, %0|%0, %2, %3}";
else
return "pinsrw\t{%3, %k2, %0|%0, %k2, %3}";
}
[(set_attr "type" "mmxcvt")
(set_attr "mode" "DI")])

View File

@ -2307,7 +2307,7 @@
(parallel [(const_int 0)]))]
UNSPEC_FIX_NOTRUNC))]
"TARGET_SSE && TARGET_64BIT"
"%vcvtss2siq\t{%1, %0|%0, %1}"
"%vcvtss2si{q}\t{%1, %0|%0, %1}"
[(set_attr "type" "sseicvt")
(set_attr "athlon_decode" "double,vector")
(set_attr "prefix_rep" "1")
@ -2319,7 +2319,7 @@
(unspec:DI [(match_operand:SF 1 "nonimmediate_operand" "x,m")]
UNSPEC_FIX_NOTRUNC))]
"TARGET_SSE && TARGET_64BIT"
"%vcvtss2siq\t{%1, %0|%0, %1}"
"%vcvtss2si{q}\t{%1, %0|%0, %1}"
[(set_attr "type" "sseicvt")
(set_attr "athlon_decode" "double,vector")
(set_attr "amdfam10_decode" "double,double")
@ -2349,7 +2349,7 @@
(match_operand:V4SF 1 "nonimmediate_operand" "x,m")
(parallel [(const_int 0)]))))]
"TARGET_SSE && TARGET_64BIT"
"%vcvttss2siq\t{%1, %0|%0, %1}"
"%vcvttss2si{q}\t{%1, %0|%0, %1}"
[(set_attr "type" "sseicvt")
(set_attr "athlon_decode" "double,vector")
(set_attr "amdfam10_decode" "double,double")
@ -6590,7 +6590,10 @@
"TARGET_AVX"
{
operands[3] = GEN_INT (exact_log2 (INTVAL (operands[3])));
return "vpinsr<avxmodesuffixs>\t{%3, %k2, %1, %0|%0, %1, %k2, %3}";
if (MEM_P (operands[2]))
return "vpinsr<avxmodesuffixs>\t{%3, %2, %1, %0|%0, %1, %2, %3}";
else
return "vpinsr<avxmodesuffixs>\t{%3, %k2, %1, %0|%0, %1, %k2, %3}";
}
[(set_attr "type" "sselog")
(set_attr "prefix" "vex")
@ -6606,7 +6609,10 @@
"TARGET_SSE4_1"
{
operands[3] = GEN_INT (exact_log2 (INTVAL (operands[3])));
return "pinsrb\t{%3, %k2, %0|%0, %k2, %3}";
if (MEM_P (operands[2]))
return "pinsrb\t{%3, %2, %0|%0, %2, %3}";
else
return "pinsrb\t{%3, %k2, %0|%0, %k2, %3}";
}
[(set_attr "type" "sselog")
(set_attr "prefix_extra" "1")
@ -6622,7 +6628,10 @@
"TARGET_SSE2"
{
operands[3] = GEN_INT (exact_log2 (INTVAL (operands[3])));
return "pinsrw\t{%3, %k2, %0|%0, %k2, %3}";
if (MEM_P (operands[2]))
return "pinsrw\t{%3, %2, %0|%0, %2, %3}";
else
return "pinsrw\t{%3, %k2, %0|%0, %k2, %3}";
}
[(set_attr "type" "sselog")
(set_attr "prefix_data16" "1")