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:
parent
d6d305febc
commit
2a930377f9
@ -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
|
||||
|
@ -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 ();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user