diff options
author | Joseph Myers <joseph@codesourcery.com> | 2012-06-19 23:08:49 +0100 |
---|---|---|
committer | Joseph Myers <jsm28@gcc.gnu.org> | 2012-06-19 23:08:49 +0100 |
commit | b513d0fe8266b0051907f492624470dc2ccce470 (patch) | |
tree | 1fc5ab62ae372a822878578abe650a606e19e87c | |
parent | f49278e65eb8259aa7c0703a32553f0ebc133047 (diff) | |
download | gcc-b513d0fe8266b0051907f492624470dc2ccce470.zip gcc-b513d0fe8266b0051907f492624470dc2ccce470.tar.gz gcc-b513d0fe8266b0051907f492624470dc2ccce470.tar.bz2 |
spe.md (*mov_si<mode>_e500_subreg0): Rename to mov_si<mode>_e500_subreg0.
* config/rs6000/spe.md (*mov_si<mode>_e500_subreg0): Rename to
mov_si<mode>_e500_subreg0.
(*mov_si<mode>_e500_subreg0_elf_low)
(*mov_si<mode>_e500_subreg4_elf_low): New patterns.
testsuite:
* gcc.c-torture/compile/vector-5.c,
gcc.c-torture/compile/vector-6.c: New tests.
From-SVN: r188795
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/config/rs6000/spe.md | 31 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/compile/vector-5.c | 7 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/compile/vector-6.c | 7 |
5 files changed, 55 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2c8eb9e..77e029e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2012-06-19 Joseph Myers <joseph@codesourcery.com> + + * config/rs6000/spe.md (*mov_si<mode>_e500_subreg0): Rename to + mov_si<mode>_e500_subreg0. + (*mov_si<mode>_e500_subreg0_elf_low) + (*mov_si<mode>_e500_subreg4_elf_low): New patterns. + 2012-06-19 Richard Henderson <rth@redhat.com> * config/alpha/alpha.c: Include params.h. diff --git a/gcc/config/rs6000/spe.md b/gcc/config/rs6000/spe.md index bbe11b9..43cdbfa 100644 --- a/gcc/config/rs6000/spe.md +++ b/gcc/config/rs6000/spe.md @@ -1,5 +1,5 @@ ;; e500 SPE description -;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 +;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012 ;; Free Software Foundation, Inc. ;; Contributed by Aldy Hernandez (aldy@quesejoda.com) @@ -2329,7 +2329,7 @@ "evmergehi %0,%1,%1\;mr %L0,%1\;evmergehi %Y0,%L1,%L1\;mr %Z0,%L1" [(set_attr "length" "16")]) -(define_insn "*mov_si<mode>_e500_subreg0" +(define_insn "mov_si<mode>_e500_subreg0" [(set (subreg:SI (match_operand:SPE64TF 0 "register_operand" "+r,&r") 0) (match_operand:SI 1 "input_operand" "r,m"))] "(TARGET_E500_DOUBLE && (<MODE>mode == DFmode || <MODE>mode == TFmode)) @@ -2339,6 +2339,24 @@ evmergelohi %0,%0,%0\;{l%U1%X1|lwz%U1%X1} %0,%1\;evmergelohi %0,%0,%0" [(set_attr "length" "4,12")]) +(define_insn_and_split "*mov_si<mode>_e500_subreg0_elf_low" + [(set (subreg:SI (match_operand:SPE64TF 0 "register_operand" "+r") 0) + (lo_sum:SI (match_operand:SI 1 "gpc_reg_operand" "r") + (match_operand 2 "" "")))] + "((TARGET_E500_DOUBLE && (<MODE>mode == DFmode || <MODE>mode == TFmode)) + || (TARGET_SPE && <MODE>mode != DFmode && <MODE>mode != TFmode)) + && TARGET_ELF && !TARGET_64BIT && can_create_pseudo_p ()" + "#" + "&& 1" + [(pc)] +{ + rtx tmp = gen_reg_rtx (SImode); + emit_insn (gen_elf_low (tmp, operands[1], operands[2])); + emit_insn (gen_mov_si<mode>_e500_subreg0 (operands[0], tmp)); + DONE; +} + [(set_attr "length" "8")]) + ;; ??? Could use evstwwe for memory stores in some cases, depending on ;; the offset. (define_insn "*mov_si<mode>_e500_subreg0_2" @@ -2360,6 +2378,15 @@ mr %0,%1 {l%U1%X1|lwz%U1%X1} %0,%1") +(define_insn "*mov_si<mode>_e500_subreg4_elf_low" + [(set (subreg:SI (match_operand:SPE64TF 0 "register_operand" "+r") 4) + (lo_sum:SI (match_operand:SI 1 "gpc_reg_operand" "r") + (match_operand 2 "" "")))] + "((TARGET_E500_DOUBLE && (<MODE>mode == DFmode || <MODE>mode == TFmode)) + || (TARGET_SPE && <MODE>mode != DFmode && <MODE>mode != TFmode)) + && TARGET_ELF && !TARGET_64BIT" + "{ai|addic} %0,%1,%K2") + (define_insn "*mov_si<mode>_e500_subreg4_2" [(set (match_operand:SI 0 "rs6000_nonimmediate_operand" "+r,m") (subreg:SI (match_operand:SPE64TF 1 "register_operand" "r,r") 4))] diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index de7b7d5..c82c0ab 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2012-06-19 Joseph Myers <joseph@codesourcery.com> + + * gcc.c-torture/compile/vector-5.c, + gcc.c-torture/compile/vector-6.c: New tests. + 2012-06-19 Richard Henderson <rth@redhat.com> * gcc.target/i386/pr33329.c: Change multiplier constant to 12345. diff --git a/gcc/testsuite/gcc.c-torture/compile/vector-5.c b/gcc/testsuite/gcc.c-torture/compile/vector-5.c new file mode 100644 index 0000000..30a4f85 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/vector-5.c @@ -0,0 +1,7 @@ +typedef int v2si __attribute__((__vector_size__(8))); + +v2si +f (int x) +{ + return (v2si) { x, (__INTPTR_TYPE__) "" }; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/vector-6.c b/gcc/testsuite/gcc.c-torture/compile/vector-6.c new file mode 100644 index 0000000..7694d36 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/vector-6.c @@ -0,0 +1,7 @@ +typedef int v2si __attribute__((__vector_size__(8))); + +v2si +f (int x) +{ + return (v2si) { (__INTPTR_TYPE__) "", x }; +} |