From: Jakub Jelinek Date: Fri, 14 Oct 2011 15:05:55 +0000 (+0200) Subject: sse.md (mulv2di3): Macroize using VI8_AVX2 iterator. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=8c3532055ae44c448bd0bff8952f60ce68e2f178;p=gcc.git sse.md (mulv2di3): Macroize using VI8_AVX2 iterator. * config/i386/sse.md (mulv2di3): Macroize using VI8_AVX2 iterator. (ashl3): Use VI248_AVX2 iterator instead of VI248_128. Use instead of TI in mode attr. From-SVN: r179987 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 59f4ed4a91b..30b9b0a0923 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2011-10-14 Jakub Jelinek + + * config/i386/sse.md (mulv2di3): Macroize using VI8_AVX2 + iterator. + (ashl3): Use VI248_AVX2 iterator instead of VI248_128. + Use instead of TI in mode attr. + 2011-10-14 David Alan Gilbert * config/arm/linux-atomic-64bit.c: New (based on linux-atomic.c). diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md index f1de7fc8d66..372f8ee89aa 100644 --- a/gcc/config/i386/sse.md +++ b/gcc/config/i386/sse.md @@ -5419,10 +5419,10 @@ DONE; }) -(define_insn_and_split "mulv2di3" - [(set (match_operand:V2DI 0 "register_operand" "") - (mult:V2DI (match_operand:V2DI 1 "register_operand" "") - (match_operand:V2DI 2 "register_operand" "")))] +(define_insn_and_split "mul3" + [(set (match_operand:VI8_AVX2 0 "register_operand" "") + (mult:VI8_AVX2 (match_operand:VI8_AVX2 1 "register_operand" "") + (match_operand:VI8_AVX2 2 "register_operand" "")))] "TARGET_SSE2 && can_create_pseudo_p ()" "#" @@ -5436,7 +5436,7 @@ op1 = operands[1]; op2 = operands[2]; - if (TARGET_XOP) + if (TARGET_XOP && mode == V2DImode) { /* op1: A,B,C,D, op2: E,F,G,H */ op1 = gen_lowpart (V4SImode, op1); @@ -5468,39 +5468,42 @@ } else { - t1 = gen_reg_rtx (V2DImode); - t2 = gen_reg_rtx (V2DImode); - t3 = gen_reg_rtx (V2DImode); - t4 = gen_reg_rtx (V2DImode); - t5 = gen_reg_rtx (V2DImode); - t6 = gen_reg_rtx (V2DImode); + t1 = gen_reg_rtx (mode); + t2 = gen_reg_rtx (mode); + t3 = gen_reg_rtx (mode); + t4 = gen_reg_rtx (mode); + t5 = gen_reg_rtx (mode); + t6 = gen_reg_rtx (mode); thirtytwo = GEN_INT (32); /* Multiply low parts. */ - emit_insn (gen_sse2_umulv2siv2di3 (t1, gen_lowpart (V4SImode, op1), - gen_lowpart (V4SImode, op2))); + emit_insn (gen__umulvsi3 + (t1, gen_lowpart (mode, op1), + gen_lowpart (mode, op2))); - /* Shift input vectors left 32 bits so we can multiply high parts. */ - emit_insn (gen_lshrv2di3 (t2, op1, thirtytwo)); - emit_insn (gen_lshrv2di3 (t3, op2, thirtytwo)); + /* Shift input vectors right 32 bits so we can multiply high parts. */ + emit_insn (gen_lshr3 (t2, op1, thirtytwo)); + emit_insn (gen_lshr3 (t3, op2, thirtytwo)); /* Multiply high parts by low parts. */ - emit_insn (gen_sse2_umulv2siv2di3 (t4, gen_lowpart (V4SImode, op1), - gen_lowpart (V4SImode, t3))); - emit_insn (gen_sse2_umulv2siv2di3 (t5, gen_lowpart (V4SImode, op2), - gen_lowpart (V4SImode, t2))); + emit_insn (gen__umulvsi3 + (t4, gen_lowpart (mode, op1), + gen_lowpart (mode, t3))); + emit_insn (gen__umulvsi3 + (t5, gen_lowpart (mode, op2), + gen_lowpart (mode, t2))); /* Shift them back. */ - emit_insn (gen_ashlv2di3 (t4, t4, thirtytwo)); - emit_insn (gen_ashlv2di3 (t5, t5, thirtytwo)); + emit_insn (gen_ashl3 (t4, t4, thirtytwo)); + emit_insn (gen_ashl3 (t5, t5, thirtytwo)); /* Add the three parts together. */ - emit_insn (gen_addv2di3 (t6, t1, t4)); - emit_insn (gen_addv2di3 (op0, t6, t5)); + emit_insn (gen_add3 (t6, t1, t4)); + emit_insn (gen_add3 (op0, t6, t5)); } set_unique_reg_note (get_last_insn (), REG_EQUAL, - gen_rtx_MULT (V2DImode, operands[1], operands[2])); + gen_rtx_MULT (mode, operands[1], operands[2])); DONE; }) @@ -5768,9 +5771,9 @@ (set_attr "mode" "OI")]) (define_insn "ashl3" - [(set (match_operand:VI248_128 0 "register_operand" "=x,x") - (ashift:VI248_128 - (match_operand:VI248_128 1 "register_operand" "0,x") + [(set (match_operand:VI248_AVX2 0 "register_operand" "=x,x") + (ashift:VI248_AVX2 + (match_operand:VI248_AVX2 1 "register_operand" "0,x") (match_operand:SI 2 "nonmemory_operand" "xN,xN")))] "TARGET_SSE2" "@ @@ -5784,7 +5787,7 @@ (const_string "0"))) (set_attr "prefix_data16" "1,*") (set_attr "prefix" "orig,vex") - (set_attr "mode" "TI")]) + (set_attr "mode" "")]) (define_expand "vec_shl_" [(set (match_operand:VI_128 0 "register_operand" "")