Commit 2a930377 by Uros Bizjak Committed by Uros Bizjak

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
parent d6d305fe
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> 2013-03-20 Richard Biener <rguenther@suse.de>
* tree-ssa-structalias.c (struct variable_info): Add pointer * tree-ssa-structalias.c (struct variable_info): Add pointer
......
...@@ -1876,8 +1876,7 @@ ...@@ -1876,8 +1876,7 @@
/* Handle broken assemblers that require movd instead of movq. */ /* Handle broken assemblers that require movd instead of movq. */
if (GENERAL_REG_P (operands[0]) || GENERAL_REG_P (operands[1])) if (GENERAL_REG_P (operands[0]) || GENERAL_REG_P (operands[1]))
return "movd\t{%1, %0|%0, %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: case TYPE_SSELOG1:
return standard_sse_constant_opcode (insn, operands[1]); return standard_sse_constant_opcode (insn, operands[1]);
...@@ -1886,14 +1885,19 @@ ...@@ -1886,14 +1885,19 @@
switch (get_attr_mode (insn)) switch (get_attr_mode (insn))
{ {
case MODE_DI: 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: case MODE_TI:
return "%vmovdqa\t{%1, %0|%0, %1}"; return "%vmovdqa\t{%1, %0|%0, %1}";
case MODE_V4SF: case MODE_V4SF:
return "%vmovaps\t{%1, %0|%0, %1}"; return "%vmovaps\t{%1, %0|%0, %1}";
case MODE_V2SF: case MODE_V2SF:
gcc_assert (!TARGET_AVX); gcc_assert (!TARGET_AVX);
return "movlps\t{%1, %0|%0, %1}"; return "movlps\t{%1, %0|%0, %1}";
default: default:
gcc_unreachable (); gcc_unreachable ();
} }
...@@ -2771,33 +2775,35 @@ ...@@ -2771,33 +2775,35 @@
case 14: case 14:
case 15: case 15:
case 16: case 16:
case 17:
case 18:
switch (get_attr_mode (insn)) 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: case MODE_DF:
if (TARGET_AVX && REG_P (operands[0]) && REG_P (operands[1])) 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|%0, %0, %1}";
return "%vmovsd\t{%1, %0|%0, %1}"; return "%vmovsd\t{%1, %0|%0, %1}";
case MODE_V1DF: case MODE_V1DF:
return "%vmovlpd\t{%1, %d0|%d0, %1}"; return "%vmovlpd\t{%1, %d0|%d0, %1}";
case MODE_V2DF:
return "%vmovapd\t{%1, %0|%0, %1}";
case MODE_V2SF: case MODE_V2SF:
gcc_assert (!TARGET_AVX); gcc_assert (!TARGET_AVX);
return "movlps\t{%1, %0|%0, %1}"; 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: default:
gcc_unreachable (); gcc_unreachable ();
} }
case 17:
case 18:
/* Handle broken assemblers that require movd instead of movq. */
return "%vmovd\t{%1, %0|%0, %1}";
default: default:
gcc_unreachable (); gcc_unreachable ();
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment