diff options
author | John David Anglin <danglin@gcc.gnu.org> | 2016-02-14 18:26:00 +0000 |
---|---|---|
committer | John David Anglin <danglin@gcc.gnu.org> | 2016-02-14 18:26:00 +0000 |
commit | fe4f432a9cfc84cc1961f626fc3a1da33e44fd52 (patch) | |
tree | f1e1e48c3b2693553ff76cc67215f16607a39783 /gcc | |
parent | 1e6025b653fcfbdc34d40ea96bf2336faf0806dd (diff) | |
download | gcc-fe4f432a9cfc84cc1961f626fc3a1da33e44fd52.zip gcc-fe4f432a9cfc84cc1961f626fc3a1da33e44fd52.tar.gz gcc-fe4f432a9cfc84cc1961f626fc3a1da33e44fd52.tar.bz2 |
pa.md (absqi2, [...]): New.
* config/pa/pa.md (absqi2, absghi2, bswaphi2, bswapsi2, bswapdi2): New.
From-SVN: r233414
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/config/pa/pa.md | 40 |
2 files changed, 44 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e81d1fe..fda12cf 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2016-02-14 John David Anglin <danglin@gcc.gnu.org> + + * config/pa/pa.md (absqi2, absghi2, bswaphi2, bswapsi2, bswapdi2): New. + 2016-02-14 Venkataramanan Kumar <venkataramanan.kumar@amd.com> * config/i386/znver1.md diff --git a/gcc/config/pa/pa.md b/gcc/config/pa/pa.md index dd4daa4..2587c05 100644 --- a/gcc/config/pa/pa.md +++ b/gcc/config/pa/pa.md @@ -1179,6 +1179,22 @@ [(set_attr "type" "multi,multi") (set_attr "length" "8,8")]) +(define_insn "absqi2" + [(set (match_operand:QI 0 "register_operand" "=r") + (abs:QI (match_operand:QI 1 "register_operand" "r")))] + "" + "{extrs|extrw,s},>= %1,31,8,%0\;subi 0,%0,%0" + [(set_attr "type" "multi") + (set_attr "length" "8")]) + +(define_insn "abshi2" + [(set (match_operand:HI 0 "register_operand" "=r") + (abs:HI (match_operand:HI 1 "register_operand" "r")))] + "" + "{extrs|extrw,s},>= %1,31,16,%0\;subi 0,%0,%0" + [(set_attr "type" "multi") + (set_attr "length" "8")]) + (define_insn "abssi2" [(set (match_operand:SI 0 "register_operand" "=r") (abs:SI (match_operand:SI 1 "register_operand" "r")))] @@ -1195,6 +1211,30 @@ [(set_attr "type" "multi") (set_attr "length" "8")]) +(define_insn "bswaphi2" + [(set (match_operand:HI 0 "register_operand" "=&r") + (bswap:HI (match_operand:HI 1 "register_operand" "r")))] + "" + "{extru|extrw,u} %1,23,8,%0\;{dep|depw} %1,23,8,%0" + [(set_attr "type" "multi") + (set_attr "length" "8")]) + +(define_insn "bswapsi2" + [(set (match_operand:SI 0 "register_operand" "=&r") + (bswap:SI (match_operand:SI 1 "register_operand" "r")))] + "" + "{shd|shrpw} %1,%1,16,%0\;{dep|depw} %0,15,8,%0\;{shd|shrpw} %1,%0,8,%0" + [(set_attr "type" "multi") + (set_attr "length" "12")]) + +(define_insn "bswapdi2" + [(set (match_operand:DI 0 "register_operand" "=&r") + (bswap:DI (match_operand:DI 1 "register_operand" "+r")))] + "TARGET_64BIT" + "permh,3210 %1,%1\;hshl %1,8,%0\;hshr,u %1,8,%1\;or %0,%1,%0" + [(set_attr "type" "multi") + (set_attr "length" "16")]) + ;;; Experimental conditional move patterns (define_expand "movsicc" |