Mercurial > hg > CbC > CbC_gcc
diff gcc/config/i386/mmx.md @ 67:f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
author | nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 22 Mar 2011 17:18:12 +0900 |
parents | b7f97abdc517 |
children | 04ced10e8804 |
line wrap: on
line diff
--- a/gcc/config/i386/mmx.md Tue May 25 18:58:51 2010 +0900 +++ b/gcc/config/i386/mmx.md Tue Mar 22 17:18:12 2011 +0900 @@ -1,5 +1,5 @@ ;; GCC machine description for MMX and 3dNOW! instructions -;; Copyright (C) 2005, 2007, 2008, 2009 +;; Copyright (C) 2005, 2007, 2008, 2009, 2010 ;; Free Software Foundation, Inc. ;; ;; This file is part of GCC. @@ -65,9 +65,9 @@ (define_insn "*mov<mode>_internal_rex64" [(set (match_operand:MMXMODEI8 0 "nonimmediate_operand" - "=rm,r,!?y,!?y ,m ,!y,*Y2,x,x ,m,r,Yi") + "=rm,r,!?y,!y,!?y,m ,!y ,*Y2,x,x ,m,r ,Yi") (match_operand:MMXMODEI8 1 "vector_move_operand" - "Cr ,m,C ,!?ym,!?y,*Y2,!y,C,xm,x,Yi,r"))] + "Cr ,m,C ,!y,m ,!?y,*Y2,!y ,C,xm,x,Yi,r"))] "TARGET_64BIT && TARGET_MMX && !(MEM_P (operands[0]) && MEM_P (operands[1]))" "@ @@ -76,38 +76,40 @@ pxor\t%0, %0 movq\t{%1, %0|%0, %1} movq\t{%1, %0|%0, %1} + movq\t{%1, %0|%0, %1} movdq2q\t{%1, %0|%0, %1} movq2dq\t{%1, %0|%0, %1} %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}" - [(set_attr "type" "imov,imov,mmx,mmxmov,mmxmov,ssecvt,ssecvt,sselog1,ssemov,ssemov,ssemov,ssemov") - (set_attr "unit" "*,*,*,*,*,mmx,mmx,*,*,*,*,*") - (set_attr "prefix_rep" "*,*,*,*,*,1,1,*,1,*,*,*") - (set_attr "prefix_data16" "*,*,*,*,*,*,*,*,*,1,1,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,*,*,*") + (set_attr "prefix_data16" "*,*,*,*,*,*,*,*,*,*,1,1,1") (set (attr "prefix_rex") - (if_then_else (eq_attr "alternative" "8,9") + (if_then_else (eq_attr "alternative" "9,10") (symbol_ref "x86_extended_reg_mentioned_p (insn)") (const_string "*"))) (set (attr "prefix") - (if_then_else (eq_attr "alternative" "7,8,9,10,11") + (if_then_else (eq_attr "alternative" "8,9,10,11,12") (const_string "maybe_vex") (const_string "orig"))) (set_attr "mode" "DI")]) (define_insn "*mov<mode>_internal_avx" [(set (match_operand:MMXMODEI8 0 "nonimmediate_operand" - "=!?y,!?y,m ,!y ,*Y2,*Y2,*Y2 ,m ,r ,m") + "=!?y,!y,!?y,m ,!y ,*Y2,*Y2,*Y2 ,m ,r ,m") (match_operand:MMXMODEI8 1 "vector_move_operand" - "C ,!ym,!?y,*Y2,!y ,C ,*Y2m,*Y2,irm,r"))] + "C ,!y,m ,!?y,*Y2,!y ,C ,*Y2m,*Y2,irm,r"))] "TARGET_AVX && !(MEM_P (operands[0]) && MEM_P (operands[1]))" "@ pxor\t%0, %0 movq\t{%1, %0|%0, %1} movq\t{%1, %0|%0, %1} + movq\t{%1, %0|%0, %1} movdq2q\t{%1, %0|%0, %1} movq2dq\t{%1, %0|%0, %1} vpxor\t%0, %0, %0 @@ -115,26 +117,27 @@ vmovq\t{%1, %0|%0, %1} # #" - [(set_attr "type" "mmx,mmxmov,mmxmov,ssecvt,ssecvt,sselog1,ssemov,ssemov,*,*") - (set_attr "unit" "*,*,*,mmx,mmx,*,*,*,*,*") - (set_attr "prefix_rep" "*,*,*,1,1,*,*,*,*,*") + [(set_attr "type" "mmx,mmxmov,mmxmov,mmxmov,ssecvt,ssecvt,sselog1,ssemov,ssemov,*,*") + (set_attr "unit" "*,*,*,*,mmx,mmx,*,*,*,*,*") + (set_attr "prefix_rep" "*,*,*,*,1,1,*,*,*,*,*") (set (attr "prefix") - (if_then_else (eq_attr "alternative" "5,6,7") + (if_then_else (eq_attr "alternative" "6,7,8") (const_string "vex") (const_string "orig"))) - (set_attr "mode" "DI,DI,DI,DI,DI,TI,DI,DI,DI,DI")]) + (set_attr "mode" "DI,DI,DI,DI,DI,DI,TI,DI,DI,DI,DI")]) (define_insn "*mov<mode>_internal" [(set (match_operand:MMXMODEI8 0 "nonimmediate_operand" - "=!?y,!?y,m ,!y ,*Y2,*Y2,*Y2 ,m ,*x,*x,*x,m ,r ,m") + "=!?y,!y,!?y,m ,!y ,*Y2,*Y2,*Y2 ,m ,*x,*x,*x,m ,r ,m") (match_operand:MMXMODEI8 1 "vector_move_operand" - "C ,!ym,!?y,*Y2,!y ,C ,*Y2m,*Y2,C ,*x,m ,*x,irm,r"))] + "C ,!y,m ,!?y,*Y2,!y ,C ,*Y2m,*Y2,C ,*x,m ,*x,irm,r"))] "TARGET_MMX && !(MEM_P (operands[0]) && MEM_P (operands[1]))" "@ pxor\t%0, %0 movq\t{%1, %0|%0, %1} movq\t{%1, %0|%0, %1} + movq\t{%1, %0|%0, %1} movdq2q\t{%1, %0|%0, %1} movq2dq\t{%1, %0|%0, %1} pxor\t%0, %0 @@ -146,11 +149,11 @@ movlps\t{%1, %0|%0, %1} # #" - [(set_attr "type" "mmx,mmxmov,mmxmov,ssecvt,ssecvt,sselog1,ssemov,ssemov,sselog1,ssemov,ssemov,ssemov,*,*") - (set_attr "unit" "*,*,*,mmx,mmx,*,*,*,*,*,*,*,*,*") - (set_attr "prefix_rep" "*,*,*,1,1,*,1,*,*,*,*,*,*,*") - (set_attr "prefix_data16" "*,*,*,*,*,*,*,1,*,*,*,*,*,*") - (set_attr "mode" "DI,DI,DI,DI,DI,TI,DI,DI,V4SF,V4SF,V2SF,V2SF,DI,DI")]) + [(set_attr "type" "mmx,mmxmov,mmxmov,mmxmov,ssecvt,ssecvt,sselog1,ssemov,ssemov,sselog1,ssemov,ssemov,ssemov,*,*") + (set_attr "unit" "*,*,*,*,mmx,mmx,*,*,*,*,*,*,*,*,*") + (set_attr "prefix_rep" "*,*,*,*,1,1,*,1,*,*,*,*,*,*,*") + (set_attr "prefix_data16" "*,*,*,*,*,*,*,*,1,*,*,*,*,*,*") + (set_attr "mode" "DI,DI,DI,DI,DI,DI,TI,DI,DI,V4SF,V4SF,V2SF,V2SF,DI,DI")]) (define_expand "movv2sf" [(set (match_operand:V2SF 0 "nonimmediate_operand" "") @@ -163,9 +166,9 @@ (define_insn "*movv2sf_internal_rex64_avx" [(set (match_operand:V2SF 0 "nonimmediate_operand" - "=rm,r ,!?y,!?y ,m ,!y,Y2,x,x,x,m,r,x") + "=rm,r,!?y,!y,!?y,m ,!y,Y2,x,x,x,m,r,x") (match_operand:V2SF 1 "vector_move_operand" - "Cr ,m ,C ,!?ym,!y,Y2,!y,C,x,m,x,x,r"))] + "Cr ,m,C ,!y,m ,!?y,Y2,!y,C,x,m,x,x,r"))] "TARGET_64BIT && TARGET_AVX && !(MEM_P (operands[0]) && MEM_P (operands[1]))" "@ @@ -174,6 +177,7 @@ pxor\t%0, %0 movq\t{%1, %0|%0, %1} movq\t{%1, %0|%0, %1} + movq\t{%1, %0|%0, %1} movdq2q\t{%1, %0|%0, %1} movq2dq\t{%1, %0|%0, %1} vxorps\t%0, %0, %0 @@ -182,21 +186,21 @@ vmovlps\t{%1, %0|%0, %1} vmovq\t{%1, %0|%0, %1} vmovq\t{%1, %0|%0, %1}" - [(set_attr "type" "imov,imov,mmx,mmxmov,mmxmov,ssecvt,ssecvt,ssemov,sselog1,ssemov,ssemov,ssemov,ssemov") - (set_attr "unit" "*,*,*,*,*,mmx,mmx,*,*,*,*,*,*") - (set_attr "prefix_rep" "*,*,*,*,*,1,1,*,*,*,*,*,*") - (set_attr "length_vex" "*,*,*,*,*,*,*,*,*,*,*,4,4") + [(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,*,*,*,*,*,*") + (set_attr "length_vex" "*,*,*,*,*,*,*,*,*,*,*,*,4,4") (set (attr "prefix") - (if_then_else (eq_attr "alternative" "7,8,9,10,11,12") + (if_then_else (eq_attr "alternative" "8,9,10,11,12,13") (const_string "vex") (const_string "orig"))) - (set_attr "mode" "DI,DI,DI,DI,DI,DI,DI,V4SF,V4SF,V2SF,V2SF,DI,DI")]) + (set_attr "mode" "DI,DI,DI,DI,DI,DI,DI,DI,V4SF,V4SF,V2SF,V2SF,DI,DI")]) (define_insn "*movv2sf_internal_rex64" [(set (match_operand:V2SF 0 "nonimmediate_operand" - "=rm,r ,!?y,!?y ,m ,!y,*Y2,x,x,x,m,r,Yi") + "=rm,r,!?y,!y,!?y,m ,!y ,*Y2,x,x,x,m,r ,Yi") (match_operand:V2SF 1 "vector_move_operand" - "Cr ,m ,C ,!?ym,!y,*Y2,!y,C,x,m,x,Yi,r"))] + "Cr ,m,C ,!y,m ,!?y,*Y2,!y ,C,x,m,x,Yi,r"))] "TARGET_64BIT && TARGET_MMX && !(MEM_P (operands[0]) && MEM_P (operands[1]))" "@ @@ -205,6 +209,7 @@ pxor\t%0, %0 movq\t{%1, %0|%0, %1} movq\t{%1, %0|%0, %1} + movq\t{%1, %0|%0, %1} movdq2q\t{%1, %0|%0, %1} movq2dq\t{%1, %0|%0, %1} xorps\t%0, %0 @@ -213,22 +218,23 @@ movlps\t{%1, %0|%0, %1} movd\t{%1, %0|%0, %1} movd\t{%1, %0|%0, %1}" - [(set_attr "type" "imov,imov,mmx,mmxmov,mmxmov,ssecvt,ssecvt,ssemov,sselog1,ssemov,ssemov,ssemov,ssemov") - (set_attr "unit" "*,*,*,*,*,mmx,mmx,*,*,*,*,*,*") - (set_attr "prefix_rep" "*,*,*,*,*,1,1,*,*,*,*,*,*") - (set_attr "mode" "DI,DI,DI,DI,DI,DI,DI,V4SF,V4SF,V2SF,V2SF,DI,DI")]) + [(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,*,*,*,*,*,*") + (set_attr "mode" "DI,DI,DI,DI,DI,DI,DI,DI,V4SF,V4SF,V2SF,V2SF,DI,DI")]) (define_insn "*movv2sf_internal_avx" [(set (match_operand:V2SF 0 "nonimmediate_operand" - "=!?y,!?y ,m ,!y ,*Y2,*x,*x,*x,m ,r ,m") + "=!?y,!y,!?y,m ,!y ,*Y2,*x,*x,*x,m ,r ,m") (match_operand:V2SF 1 "vector_move_operand" - "C ,!?ym,!?y,*Y2,!y ,C ,*x,m ,*x,irm,r"))] + "C ,!y,m ,!?y,*Y2,!y ,C ,*x,m ,*x,irm,r"))] "TARGET_AVX && !(MEM_P (operands[0]) && MEM_P (operands[1]))" "@ pxor\t%0, %0 movq\t{%1, %0|%0, %1} movq\t{%1, %0|%0, %1} + movq\t{%1, %0|%0, %1} movdq2q\t{%1, %0|%0, %1} movq2dq\t{%1, %0|%0, %1} vxorps\t%0, %0, %0 @@ -237,26 +243,27 @@ vmovlps\t{%1, %0|%0, %1} # #" - [(set_attr "type" "mmx,mmxmov,mmxmov,ssecvt,ssecvt,sselog1,ssemov,ssemov,ssemov,*,*") - (set_attr "unit" "*,*,*,mmx,mmx,*,*,*,*,*,*") - (set_attr "prefix_rep" "*,*,*,1,1,*,*,*,*,*,*") + [(set_attr "type" "mmx,mmxmov,mmxmov,mmxmov,ssecvt,ssecvt,sselog1,ssemov,ssemov,ssemov,*,*") + (set_attr "unit" "*,*,*,*,mmx,mmx,*,*,*,*,*,*") + (set_attr "prefix_rep" "*,*,*,*,1,1,*,*,*,*,*,*") (set (attr "prefix") - (if_then_else (eq_attr "alternative" "5,6,7,8") + (if_then_else (eq_attr "alternative" "6,7,8,9") (const_string "vex") (const_string "orig"))) - (set_attr "mode" "DI,DI,DI,DI,DI,V4SF,V4SF,V2SF,V2SF,DI,DI")]) + (set_attr "mode" "DI,DI,DI,DI,DI,DI,V4SF,V4SF,V2SF,V2SF,DI,DI")]) (define_insn "*movv2sf_internal" [(set (match_operand:V2SF 0 "nonimmediate_operand" - "=!?y,!?y ,m ,!y ,*Y2,*x,*x,*x,m ,r ,m") + "=!?y,!y,!?y,m ,!y ,*Y2,*x,*x,*x,m ,r ,m") (match_operand:V2SF 1 "vector_move_operand" - "C ,!?ym,!?y,*Y2,!y ,C ,*x,m ,*x,irm,r"))] + "C ,!y,m ,!?y,*Y2,!y ,C ,*x,m ,*x,irm,r"))] "TARGET_MMX && !(MEM_P (operands[0]) && MEM_P (operands[1]))" "@ pxor\t%0, %0 movq\t{%1, %0|%0, %1} movq\t{%1, %0|%0, %1} + movq\t{%1, %0|%0, %1} movdq2q\t{%1, %0|%0, %1} movq2dq\t{%1, %0|%0, %1} xorps\t%0, %0 @@ -265,10 +272,10 @@ movlps\t{%1, %0|%0, %1} # #" - [(set_attr "type" "mmx,mmxmov,mmxmov,ssecvt,ssecvt,sselog1,ssemov,ssemov,ssemov,*,*") - (set_attr "unit" "*,*,*,mmx,mmx,*,*,*,*,*,*") - (set_attr "prefix_rep" "*,*,*,1,1,*,*,*,*,*,*") - (set_attr "mode" "DI,DI,DI,DI,DI,V4SF,V4SF,V2SF,V2SF,DI,DI")]) + [(set_attr "type" "mmx,mmxmov,mmxmov,mmxmov,ssecvt,ssecvt,sselog1,ssemov,ssemov,ssemov,*,*") + (set_attr "unit" "*,*,*,*,mmx,mmx,*,*,*,*,*,*") + (set_attr "prefix_rep" "*,*,*,*,1,1,*,*,*,*,*,*") + (set_attr "mode" "DI,DI,DI,DI,DI,DI,V4SF,V4SF,V2SF,V2SF,DI,DI")]) ;; %%% This multiword shite has got to go. (define_split @@ -334,15 +341,13 @@ [(set (match_operand:V2SF 0 "register_operand" "") (minus:V2SF (match_operand:V2SF 1 "register_operand" "") (match_operand:V2SF 2 "nonimmediate_operand" "")))] - "TARGET_3DNOW" - "") + "TARGET_3DNOW") (define_expand "mmx_subrv2sf3" [(set (match_operand:V2SF 0 "register_operand" "") (minus:V2SF (match_operand:V2SF 2 "register_operand" "") (match_operand:V2SF 1 "nonimmediate_operand" "")))] - "TARGET_3DNOW" - "") + "TARGET_3DNOW") (define_insn "*mmx_subv2sf3" [(set (match_operand:V2SF 0 "register_operand" "=y,y") @@ -1616,8 +1621,7 @@ (match_operand:V8QI 2 "register_operand" "") (match_dup 0)] UNSPEC_MASKMOV))] - "TARGET_SSE || TARGET_3DNOW_A" - "") + "TARGET_SSE || TARGET_3DNOW_A") (define_insn "*mmx_maskmovq" [(set (mem:V8QI (match_operand:SI 0 "register_operand" "D"))