aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAdrian Straetling <straetling@de.ibm.com>2005-05-09 17:21:03 +0000
committerUlrich Weigand <uweigand@gcc.gnu.org>2005-05-09 17:21:03 +0000
commitf337b93018fa596ef1878588c5efd4dd16caab73 (patch)
treec0f9893ee5dc526dd80fc8123f9ef5ac46f4641c /gcc
parent9a91a21f2a05da796a1b0f3a04bbb9f1834698bf (diff)
downloadgcc-f337b93018fa596ef1878588c5efd4dd16caab73.zip
gcc-f337b93018fa596ef1878588c5efd4dd16caab73.tar.gz
gcc-f337b93018fa596ef1878588c5efd4dd16caab73.tar.bz2
s390.md: ("SHIFT"): New mode macro.
2005-05-09 Adrian Straetling <straetling@de.ibm.com> * config/s390/s390.md: ("SHIFT"): New mode macro. ("lr", "shift"): New mode attributes. ("ashldi3", "lshrdi3"): Merge. ("*ashldi3_31", "*lshrdi3"_31): Merge. ("*ashldi3_64", "*lshrdi3"_64): Merge. ("ashlsi3", "lshrsi3"): Merge. From-SVN: r99455
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/config/s390/s390.md95
2 files changed, 39 insertions, 65 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 319c022..c0d57d6 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,14 @@
2005-05-09 Adrian Straetling <straetling@de.ibm.com>
+ * config/s390/s390.md: ("SHIFT"): New mode macro.
+ ("lr", "shift"): New mode attributes.
+ ("ashldi3", "lshrdi3"): Merge.
+ ("*ashldi3_31", "*lshrdi3"_31): Merge.
+ ("*ashldi3_64", "*lshrdi3"_64): Merge.
+ ("ashlsi3", "lshrsi3"): Merge.
+
+2005-05-09 Adrian Straetling <straetling@de.ibm.com>
+
* config/s390/s390.md: ("DSI", "SCOND"): New mode
macros.
("E", "g"): New mode attributes.
diff --git a/gcc/config/s390/s390.md b/gcc/config/s390/s390.md
index 6557721..39e9aba 100644
--- a/gcc/config/s390/s390.md
+++ b/gcc/config/s390/s390.md
@@ -259,6 +259,18 @@
;; This macro allows to unify all 'sCOND' patterns.
(define_code_macro SCOND [ltu gtu leu geu])
+;; This macro allows some 'ashift' and 'lshiftrt' pattern to be defined from
+;; the same template.
+(define_code_macro SHIFT [ashift lshiftrt])
+
+
+;; In SHIFT templates, a string like "s<lr>dl" will expand to "sldl" in
+;; 'ashift' and "srdl" in 'lshiftrt'.
+(define_code_attr lr [(ashift "l") (lshiftrt "r")])
+
+;; In SHIFT templates, this attribute holds the correct standard name for the
+;; pattern itself and the corresponding function calls.
+(define_code_attr shift [(ashift "ashl") (lshiftrt "lshr")])
;; This attribute handles differences in the instruction 'type' and will result
;; in "RRE" for DImode and "RR" for SImode.
@@ -6329,35 +6341,35 @@
;;
-;;- Arithmetic shift instructions.
+;;- Shift instructions.
;;
;
-; ashldi3 instruction pattern(s).
+; (ashl|lshr)di3 instruction pattern(s).
;
-(define_expand "ashldi3"
+(define_expand "<shift>di3"
[(set (match_operand:DI 0 "register_operand" "")
- (ashift:DI (match_operand:DI 1 "register_operand" "")
- (match_operand:SI 2 "shift_count_operand" "")))]
+ (SHIFT:DI (match_operand:DI 1 "register_operand" "")
+ (match_operand:SI 2 "shift_count_operand" "")))]
""
"")
-(define_insn "*ashldi3_31"
+(define_insn "*<shift>di3_31"
[(set (match_operand:DI 0 "register_operand" "=d")
- (ashift:DI (match_operand:DI 1 "register_operand" "0")
- (match_operand:SI 2 "shift_count_operand" "Y")))]
+ (SHIFT:DI (match_operand:DI 1 "register_operand" "0")
+ (match_operand:SI 2 "shift_count_operand" "Y")))]
"!TARGET_64BIT"
- "sldl\t%0,%Y2"
+ "s<lr>dl\t%0,%Y2"
[(set_attr "op_type" "RS")
(set_attr "atype" "reg")])
-(define_insn "*ashldi3_64"
+(define_insn "*<shift>di3_64"
[(set (match_operand:DI 0 "register_operand" "=d")
- (ashift:DI (match_operand:DI 1 "register_operand" "d")
- (match_operand:SI 2 "shift_count_operand" "Y")))]
+ (SHIFT:DI (match_operand:DI 1 "register_operand" "d")
+ (match_operand:SI 2 "shift_count_operand" "Y")))]
"TARGET_64BIT"
- "sllg\t%0,%1,%Y2"
+ "s<lr>lg\t%0,%1,%Y2"
[(set_attr "op_type" "RSE")
(set_attr "atype" "reg")])
@@ -6442,15 +6454,15 @@
;
-; ashlsi3 instruction pattern(s).
+; (ashl|lshr)si3 instruction pattern(s).
;
-(define_insn "ashlsi3"
+(define_insn "<shift>si3"
[(set (match_operand:SI 0 "register_operand" "=d")
- (ashift:SI (match_operand:SI 1 "register_operand" "0")
- (match_operand:SI 2 "shift_count_operand" "Y")))]
+ (SHIFT:SI (match_operand:SI 1 "register_operand" "0")
+ (match_operand:SI 2 "shift_count_operand" "Y")))]
""
- "sll\t%0,%Y2"
+ "s<lr>l\t%0,%Y2"
[(set_attr "op_type" "RS")
(set_attr "atype" "reg")])
@@ -6494,53 +6506,6 @@
;;
-;;- logical shift instructions.
-;;
-
-;
-; lshrdi3 instruction pattern(s).
-;
-
-(define_expand "lshrdi3"
- [(set (match_operand:DI 0 "register_operand" "")
- (lshiftrt:DI (match_operand:DI 1 "register_operand" "")
- (match_operand:SI 2 "shift_count_operand" "")))]
- ""
- "")
-
-(define_insn "*lshrdi3_31"
- [(set (match_operand:DI 0 "register_operand" "=d")
- (lshiftrt:DI (match_operand:DI 1 "register_operand" "0")
- (match_operand:SI 2 "shift_count_operand" "Y")))]
- "!TARGET_64BIT"
- "srdl\t%0,%Y2"
- [(set_attr "op_type" "RS")
- (set_attr "atype" "reg")])
-
-(define_insn "*lshrdi3_64"
- [(set (match_operand:DI 0 "register_operand" "=d")
- (lshiftrt:DI (match_operand:DI 1 "register_operand" "d")
- (match_operand:SI 2 "shift_count_operand" "Y")))]
- "TARGET_64BIT"
- "srlg\t%0,%1,%Y2"
- [(set_attr "op_type" "RSE")
- (set_attr "atype" "reg")])
-
-;
-; lshrsi3 instruction pattern(s).
-;
-
-(define_insn "lshrsi3"
- [(set (match_operand:SI 0 "register_operand" "=d")
- (lshiftrt:SI (match_operand:SI 1 "register_operand" "0")
- (match_operand:SI 2 "shift_count_operand" "Y")))]
- ""
- "srl\t%0,%Y2"
- [(set_attr "op_type" "RS")
- (set_attr "atype" "reg")])
-
-
-;;
;; Branch instruction patterns.
;;