re PR bootstrap/56656 (Suffix or operands invalid for 'movq')

PR bootstrap/56656
	* config/i386/i386.md (*movdi_internal): Handle broken assemblers
	that require movd instead of movq.

From-SVN: r196813
This commit is contained in:
Uros Bizjak 2013-03-20 10:23:39 +01:00 committed by Uros Bizjak
parent d6d305febc
commit 2a930377f9
2 changed files with 27 additions and 15 deletions

View File

@ -1,3 +1,9 @@
2013-03-20 Uros Bizjak <ubizjak@gmail.com>
PR bootstrap/56656
* config/i386/i386.md (*movdi_internal): Handle broken assemblers
that require movd instead of movq.
2013-03-20 Richard Biener <rguenther@suse.de>
* tree-ssa-structalias.c (struct variable_info): Add pointer

View File

@ -1876,8 +1876,7 @@
/* Handle broken assemblers that require movd instead of movq. */
if (GENERAL_REG_P (operands[0]) || GENERAL_REG_P (operands[1]))
return "movd\t{%1, %0|%0, %1}";
else
return "movq\t{%1, %0|%0, %1}";
return "movq\t{%1, %0|%0, %1}";
case TYPE_SSELOG1:
return standard_sse_constant_opcode (insn, operands[1]);
@ -1886,14 +1885,19 @@
switch (get_attr_mode (insn))
{
case MODE_DI:
return "%vmovq\t{%1, %0|%0, %1}";
/* Handle broken assemblers that require movd instead of movq. */
if (GENERAL_REG_P (operands[0]) || GENERAL_REG_P (operands[1]))
return "%vmovd\t{%1, %0|%0, %1}";
return "%vmovq\t{%1, %0|%0, %1}";
case MODE_TI:
return "%vmovdqa\t{%1, %0|%0, %1}";
case MODE_V4SF:
return "%vmovaps\t{%1, %0|%0, %1}";
case MODE_V2SF:
gcc_assert (!TARGET_AVX);
return "movlps\t{%1, %0|%0, %1}";
default:
gcc_unreachable ();
}
@ -2771,33 +2775,35 @@
case 14:
case 15:
case 16:
case 17:
case 18:
switch (get_attr_mode (insn))
{
case MODE_V2DF:
return "%vmovapd\t{%1, %0|%0, %1}";
case MODE_V4SF:
return "%vmovaps\t{%1, %0|%0, %1}";
case MODE_DI:
return "%vmovq\t{%1, %0|%0, %1}";
case MODE_DF:
if (TARGET_AVX && REG_P (operands[0]) && REG_P (operands[1]))
return "vmovsd\t{%1, %0, %0|%0, %0, %1}";
return "%vmovsd\t{%1, %0|%0, %1}";
case MODE_V1DF:
return "%vmovlpd\t{%1, %d0|%d0, %1}";
case MODE_V2DF:
return "%vmovapd\t{%1, %0|%0, %1}";
case MODE_V2SF:
gcc_assert (!TARGET_AVX);
return "movlps\t{%1, %0|%0, %1}";
case MODE_V4SF:
return "%vmovaps\t{%1, %0|%0, %1}";
case MODE_DI:
/* Handle broken assemblers that require movd instead of movq. */
if (GENERAL_REG_P (operands[0]) || GENERAL_REG_P (operands[1]))
return "%vmovd\t{%1, %0|%0, %1}";
return "%vmovq\t{%1, %0|%0, %1}";
default:
gcc_unreachable ();
}
case 17:
case 18:
/* Handle broken assemblers that require movd instead of movq. */
return "%vmovd\t{%1, %0|%0, %1}";
default:
gcc_unreachable ();
}