diff options
author | Uros Bizjak <uros@gcc.gnu.org> | 2011-05-04 12:05:20 +0200 |
---|---|---|
committer | Uros Bizjak <uros@gcc.gnu.org> | 2011-05-04 12:05:20 +0200 |
commit | 843b691524dbbb03fdcc541d2cfadb9f5ed84342 (patch) | |
tree | ec6539e73094a4957ad4096496df6faa4479a72f /gcc | |
parent | fbcf0dcae3e74f3f82e5aefef116c9d4f96bc48f (diff) | |
download | gcc-843b691524dbbb03fdcc541d2cfadb9f5ed84342.zip gcc-843b691524dbbb03fdcc541d2cfadb9f5ed84342.tar.gz gcc-843b691524dbbb03fdcc541d2cfadb9f5ed84342.tar.bz2 |
re PR target/48860 (r173265 breaks bootstrap on x86_64-apple-darwin10)
PR target/48860
* config/i386/i386.md (*movdi_internal_rex64) Use %vmovd
for reg<->xmm moves.
* config/i386/sse.md (*vec_concatv2di_rex64_sse4_1): Ditto.
(vec_concatv2di_rex64_sse): Ditto.
(*sse2_storeq_rex64): Do not emit %v prefix for mov{q} mnemonic.
(*vec_extractv2di_1_rex64): Ditto.
Revert:
2011-05-02 Uros Bizjak <ubizjak@gmail.com>
* config/i386/mmx.md (*mov<mode>_internal_rex64): Use %vmovq for
reg<->xmm moves.
(*movv2sf_internal_rex64): Use %vmovq for reg<->xmm moves.
From-SVN: r173361
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 20 | ||||
-rw-r--r-- | gcc/config/i386/i386.md | 14 | ||||
-rw-r--r-- | gcc/config/i386/mmx.md | 10 | ||||
-rw-r--r-- | gcc/config/i386/sse.md | 13 |
4 files changed, 40 insertions, 17 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5f31ad8..97c6bcb 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,20 @@ +2011-05-04 Uros Bizjak <ubizjak@gmail.com> + + PR target/48860 + * config/i386/i386.md (*movdi_internal_rex64) Use %vmovd + for reg<->xmm moves. + * config/i386/sse.md (*vec_concatv2di_rex64_sse4_1): Ditto. + (vec_concatv2di_rex64_sse): Ditto. + (*sse2_storeq_rex64): Do not emit %v prefix for mov{q} mnemonic. + (*vec_extractv2di_1_rex64): Ditto. + + Revert: + 2011-05-02 Uros Bizjak <ubizjak@gmail.com> + + * config/i386/mmx.md (*mov<mode>_internal_rex64): Use %vmovq for + reg<->xmm moves. + (*movv2sf_internal_rex64): Use %vmovq for reg<->xmm moves. + 2011-05-04 Richard Guenther <rguenther@suse.de> * tree.h (int_const_binop): Remove notrunc argument. @@ -79,8 +96,7 @@ * config/mips/mips.h (enum mips_code_readable_setting): Move to mips-opts.h. (mips_abi, mips_code_readable): Don't declare. - * config/mips/mips.opt (config/mips/mips-opts.h): New - HeaderInclude. + * config/mips/mips.opt (config/mips/mips-opts.h): New HeaderInclude. (mabi=): Use Enum and Var. (mips_abi): New Enum and EnumValue entries. (mcode-readable=): Use Enum and Var. diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index bf04248..3b9b7f5 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -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(); @@ -3494,12 +3497,13 @@ case 9: case 10: case 14: case 15: return "movd\t{%1, %0|%0, %1}"; - case 12: case 13: - return "%vmovd\t{%1, %0|%0, %1}"; case 11: return "movq\t{%1, %0|%0, %1}"; + case 12: case 13: + return "%vmovd\t{%1, %0|%0, %1}"; + default: gcc_unreachable (); } diff --git a/gcc/config/i386/mmx.md b/gcc/config/i386/mmx.md index 81795ab..fc3b8a9 100644 --- a/gcc/config/i386/mmx.md +++ b/gcc/config/i386/mmx.md @@ -63,6 +63,7 @@ DONE; }) +;; movd instead of movq is required to handle broken assemblers. (define_insn "*mov<mode>_internal_rex64" [(set (match_operand:MMXMODEI8 0 "nonimmediate_operand" "=rm,r,!?y,!y,!?y,m ,!y ,*Y2,x,x ,m,r ,Yi") @@ -82,8 +83,8 @@ %vpxor\t%0, %d0 %vmovq\t{%1, %0|%0, %1} %vmovq\t{%1, %0|%0, %1} - %vmovq\t{%1, %0|%0, %1} - %vmovq\t{%1, %0|%0, %1}" + %vmovd\t{%1, %0|%0, %1} + %vmovd\t{%1, %0|%0, %1}" [(set_attr "type" "imov,imov,mmx,mmxmov,mmxmov,mmxmov,ssecvt,ssecvt,sselog1,ssemov,ssemov,ssemov,ssemov") (set_attr "unit" "*,*,*,*,*,*,mmx,mmx,*,*,*,*,*") (set_attr "prefix_rep" "*,*,*,*,*,*,1,1,*,1,*,*,*") @@ -155,6 +156,7 @@ DONE; }) +;; movd instead of movq is required to handle broken assemblers. (define_insn "*movv2sf_internal_rex64" [(set (match_operand:V2SF 0 "nonimmediate_operand" "=rm,r,!?y,!y,!?y,m ,!y ,*Y2,x,x,x,m,r ,Yi") @@ -175,8 +177,8 @@ %vmovaps\t{%1, %0|%0, %1} %vmovlps\t{%1, %d0|%d0, %1} %vmovlps\t{%1, %0|%0, %1} - %vmovq\t{%1, %0|%0, %1} - %vmovq\t{%1, %0|%0, %1}" + %vmovd\t{%1, %0|%0, %1} + %vmovd\t{%1, %0|%0, %1}" [(set_attr "type" "imov,imov,mmx,mmxmov,mmxmov,mmxmov,ssecvt,ssecvt,ssemov,sselog1,ssemov,ssemov,ssemov,ssemov") (set_attr "unit" "*,*,*,*,*,*,mmx,mmx,*,*,*,*,*,*") (set_attr "prefix_rep" "*,*,*,*,*,*,1,1,*,*,*,*,*,*") diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md index 894afc1..99dfeab 100644 --- a/gcc/config/i386/sse.md +++ b/gcc/config/i386/sse.md @@ -6479,9 +6479,8 @@ "@ # # - %vmov{q}\t{%1, %0|%0, %1}" + mov{q}\t{%1, %0|%0, %1}" [(set_attr "type" "*,*,imov") - (set_attr "prefix" "*,*,maybe_vex") (set_attr "mode" "*,*,DI")]) (define_insn "*sse2_storeq" @@ -6516,12 +6515,12 @@ psrldq\t{$8, %0|%0, 8} vpsrldq\t{$8, %1, %0|%0, %1, 8} %vmovq\t{%H1, %0|%0, %H1} - %vmov{q}\t{%H1, %0|%0, %H1}" + mov{q}\t{%H1, %0|%0, %H1}" [(set_attr "isa" "base,noavx,avx,base,base") (set_attr "type" "ssemov,sseishft1,sseishft1,ssemov,imov") (set_attr "length_immediate" "*,1,1,*,*") (set_attr "memory" "*,none,none,*,*") - (set_attr "prefix" "maybe_vex,orig,vex,maybe_vex,maybe_vex") + (set_attr "prefix" "maybe_vex,orig,vex,maybe_vex,orig") (set_attr "mode" "V2SF,TI,TI,TI,DI")]) (define_insn "*vec_extractv2di_1_sse2" @@ -6687,6 +6686,7 @@ [(set_attr "type" "sselog,ssemov,ssemov") (set_attr "mode" "TI,V4SF,V2SF")]) +;; movd instead of movq is required to handle broken assemblers. (define_insn "*vec_concatv2di_rex64_sse4_1" [(set (match_operand:V2DI 0 "register_operand" "=x, x, x,Yi,!x,x,x,x,x") @@ -6700,7 +6700,7 @@ pinsrq\t{$0x1, %2, %0|%0, %2, 0x1} vpinsrq\t{$0x1, %2, %1, %0|%0, %1, %2, 0x1} %vmovq\t{%1, %0|%0, %1} - %vmovq\t{%1, %0|%0, %1} + %vmovd\t{%1, %0|%0, %1} movq2dq\t{%1, %0|%0, %1} punpcklqdq\t{%2, %0|%0, %2} vpunpcklqdq\t{%2, %1, %0|%0, %1, %2} @@ -6719,6 +6719,7 @@ (set_attr "prefix" "orig,vex,maybe_vex,maybe_vex,orig,orig,vex,orig,vex") (set_attr "mode" "TI,TI,TI,TI,TI,TI,TI,V2SF,V2SF")]) +;; movd instead of movq is required to handle broken assemblers. (define_insn "*vec_concatv2di_rex64_sse" [(set (match_operand:V2DI 0 "register_operand" "=Y2,Yi,!Y2,Y2,x,x") (vec_concat:V2DI @@ -6727,7 +6728,7 @@ "TARGET_64BIT && TARGET_SSE" "@ movq\t{%1, %0|%0, %1} - movq\t{%1, %0|%0, %1} + movd\t{%1, %0|%0, %1} movq2dq\t{%1, %0|%0, %1} punpcklqdq\t{%2, %0|%0, %2} movlhps\t{%2, %0|%0, %2} |