On Wed, May 04, 2011 at 12:02:17PM +0200, Uros Bizjak wrote:
> Tested on x86_64-pc-linux-gnu, committed to mainline SVN. I will audit
> movq usage in other release branches as well.
s/reqire/require/g
> --- config/i386/i386.md (revision 173353)
> +++ config/i386/i386.md (working copy)
> @@ -2001,11 +2001,13 @@
> case TYPE_SSEMOV:
> if (get_attr_mode (insn) == MODE_TI)
> return "%vmovdqa\t{%1, %0|%0, %1}";
> + /* Handle broken assemblers that reqire 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 TYPE_MMXMOV:
> - /* Moves from and into integer register is done using movd
> - opcode with REX prefix. */
> + /* Handle broken assemblers that reqire movd instead of movq. */
> if (GENERAL_REG_P (operands[0]) || GENERAL_REG_P (operands[1]))
> return "movd\t{%1, %0|%0, %1}";
> return "movq\t{%1, %0|%0, %1}";
> @@ -3018,7 +3020,8 @@
>
> case 11:
> case 12:
> - return "%vmovd\t{%1, %0|%0, %1}";
> + /* Handle broken assemblers that reqire movd instead of movq. */
> + return "%vmovd\t{%1, %0|%0, %1}";
>
> default:
> gcc_unreachable();
Jakub