diff options
author | Segher Boessenkool <segher@kernel.crashing.org> | 2014-09-21 20:02:54 +0200 |
---|---|---|
committer | Segher Boessenkool <segher@gcc.gnu.org> | 2014-09-21 20:02:54 +0200 |
commit | f4e0b104a60a18ed1512caaae61871afa333e368 (patch) | |
tree | 0dfb2b5acab9cb59b511b70bdeddf71c2a669d95 /gcc | |
parent | 9f31288f440e5b75ef5d7759310bfd95362610a7 (diff) | |
download | gcc-f4e0b104a60a18ed1512caaae61871afa333e368.zip gcc-f4e0b104a60a18ed1512caaae61871afa333e368.tar.gz gcc-f4e0b104a60a18ed1512caaae61871afa333e368.tar.bz2 |
rs6000.md (ctz<mode>2, [...]): Tidy.
2014-09-21 Segher Boessenkool <segher@kernel.crashing.org>
* config/rs6000/rs6000.md (ctz<mode>2, ffs<mode>2, popcount<mode>2,
popcntb<mode>2, popcntd<mode>2, parity<mode>2, parity<mode>2_cmpb):
Tidy.
From-SVN: r215435
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.md | 70 |
2 files changed, 41 insertions, 35 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 08e66b7..fbbf00f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,11 @@ 2014-09-21 Segher Boessenkool <segher@kernel.crashing.org> + * config/rs6000/rs6000.md (ctz<mode>2, ffs<mode>2, popcount<mode>2, + popcntb<mode>2, popcntd<mode>2, parity<mode>2, parity<mode>2_cmpb): + Tidy. + +2014-09-21 Segher Boessenkool <segher@kernel.crashing.org> + * config/rs6000/rs6000.md (strlensi): Don't use subsi3 with a constant, use addsi3 directly. (three anonymous define_insn, two define_split): Delete. diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md index dfebf5a..059dd99 100644 --- a/gcc/config/rs6000/rs6000.md +++ b/gcc/config/rs6000/rs6000.md @@ -1797,12 +1797,12 @@ (match_dup 4))) (clobber (reg:GPR CA_REGNO))])] "" - { - operands[2] = gen_reg_rtx (<MODE>mode); - operands[3] = gen_reg_rtx (<MODE>mode); - operands[4] = gen_reg_rtx (<MODE>mode); - operands[5] = GEN_INT (GET_MODE_BITSIZE (<MODE>mode) - 1); - }) +{ + operands[2] = gen_reg_rtx (<MODE>mode); + operands[3] = gen_reg_rtx (<MODE>mode); + operands[4] = gen_reg_rtx (<MODE>mode); + operands[5] = GEN_INT (GET_MODE_BITSIZE (<MODE>mode) - 1); +}) (define_expand "ffs<mode>2" [(set (match_dup 2) @@ -1817,55 +1817,55 @@ (match_dup 4))) (clobber (reg:GPR CA_REGNO))])] "" - { - operands[2] = gen_reg_rtx (<MODE>mode); - operands[3] = gen_reg_rtx (<MODE>mode); - operands[4] = gen_reg_rtx (<MODE>mode); - operands[5] = GEN_INT (GET_MODE_BITSIZE (<MODE>mode)); - }) +{ + operands[2] = gen_reg_rtx (<MODE>mode); + operands[3] = gen_reg_rtx (<MODE>mode); + operands[4] = gen_reg_rtx (<MODE>mode); + operands[5] = GEN_INT (GET_MODE_BITSIZE (<MODE>mode)); +}) + + +(define_expand "popcount<mode>2" + [(set (match_operand:GPR 0 "gpc_reg_operand" "") + (popcount:GPR (match_operand:GPR 1 "gpc_reg_operand" "")))] + "TARGET_POPCNTB || TARGET_POPCNTD" +{ + rs6000_emit_popcount (operands[0], operands[1]); + DONE; +}) (define_insn "popcntb<mode>2" [(set (match_operand:GPR 0 "gpc_reg_operand" "=r") - (unspec:GPR [(match_operand:GPR 1 "gpc_reg_operand" "r")] - UNSPEC_POPCNTB))] + (unspec:GPR [(match_operand:GPR 1 "gpc_reg_operand" "r")] + UNSPEC_POPCNTB))] "TARGET_POPCNTB" "popcntb %0,%1" - [(set_attr "length" "4") - (set_attr "type" "popcnt")]) + [(set_attr "type" "popcnt")]) (define_insn "popcntd<mode>2" [(set (match_operand:GPR 0 "gpc_reg_operand" "=r") (popcount:GPR (match_operand:GPR 1 "gpc_reg_operand" "r")))] "TARGET_POPCNTD" "popcnt<wd> %0,%1" - [(set_attr "length" "4") - (set_attr "type" "popcnt")]) + [(set_attr "type" "popcnt")]) -(define_expand "popcount<mode>2" + +(define_expand "parity<mode>2" [(set (match_operand:GPR 0 "gpc_reg_operand" "") - (popcount:GPR (match_operand:GPR 1 "gpc_reg_operand" "")))] - "TARGET_POPCNTB || TARGET_POPCNTD" - { - rs6000_emit_popcount (operands[0], operands[1]); - DONE; - }) + (parity:GPR (match_operand:GPR 1 "gpc_reg_operand" "")))] + "TARGET_POPCNTB" +{ + rs6000_emit_parity (operands[0], operands[1]); + DONE; +}) (define_insn "parity<mode>2_cmpb" [(set (match_operand:GPR 0 "gpc_reg_operand" "=r") (unspec:GPR [(match_operand:GPR 1 "gpc_reg_operand" "r")] UNSPEC_PARITY))] "TARGET_CMPB && TARGET_POPCNTB" "prty<wd> %0,%1" - [(set_attr "length" "4") - (set_attr "type" "popcnt")]) + [(set_attr "type" "popcnt")]) -(define_expand "parity<mode>2" - [(set (match_operand:GPR 0 "gpc_reg_operand" "") - (parity:GPR (match_operand:GPR 1 "gpc_reg_operand" "")))] - "TARGET_POPCNTB" - { - rs6000_emit_parity (operands[0], operands[1]); - DONE; - }) ;; Since the hardware zeros the upper part of the register, save generating the ;; AND immediate if we are converting to unsigned |