From fe4f432a9cfc84cc1961f626fc3a1da33e44fd52 Mon Sep 17 00:00:00 2001 From: John David Anglin Date: Sun, 14 Feb 2016 18:26:00 +0000 Subject: [PATCH] pa.md (absqi2, [...]): New. * config/pa/pa.md (absqi2, absghi2, bswaphi2, bswapsi2, bswapdi2): New. From-SVN: r233414 --- gcc/ChangeLog | 4 ++++ gcc/config/pa/pa.md | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e81d1feeb98..fda12cf1f36 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2016-02-14 John David Anglin + + * config/pa/pa.md (absqi2, absghi2, bswaphi2, bswapsi2, bswapdi2): New. + 2016-02-14 Venkataramanan Kumar * config/i386/znver1.md diff --git a/gcc/config/pa/pa.md b/gcc/config/pa/pa.md index dd4daa4a907..2587c054648 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" -- 2.30.2