summaryrefslogtreecommitdiff
path: root/gnu/egcs/gcc
diff options
context:
space:
mode:
authorMiod Vallat <miod@cvs.openbsd.org>2008-11-04 20:52:29 +0000
committerMiod Vallat <miod@cvs.openbsd.org>2008-11-04 20:52:29 +0000
commit0cdfe2144d480af8907ca96f2ab595f144a87c13 (patch)
treefdc540a92a5a48dc1ca2234f02d8264c63d164dc /gnu/egcs/gcc
parentf4ffd126dfcba0e1dd82b899148c850c0093e30a (diff)
Reintroduce the extendsidi2 optimized sequence, but as a define_split
construct, so that it is still written in rtl statements, and part of it can be put in a delay slot. And the way it's written now, it does not create bogus uninitialized warnings.
Diffstat (limited to 'gnu/egcs/gcc')
-rw-r--r--gnu/egcs/gcc/config/m88k/m88k.md15
1 files changed, 15 insertions, 0 deletions
diff --git a/gnu/egcs/gcc/config/m88k/m88k.md b/gnu/egcs/gcc/config/m88k/m88k.md
index 482282ea6dc..b1e5e4e1edd 100644
--- a/gnu/egcs/gcc/config/m88k/m88k.md
+++ b/gnu/egcs/gcc/config/m88k/m88k.md
@@ -2316,6 +2316,21 @@
;;- sign extension instructions
+(define_insn "extendsidi2"
+ [(set (match_operand:DI 0 "register_operand" "=r")
+ (sign_extend:DI (match_operand:SI 1 "register_operand" "r")))]
+ ""
+ "#")
+
+(define_split
+ [(set (match_operand:DI 0 "register_operand" "=r")
+ (sign_extend:DI (match_operand:SI 1 "register_operand" "r")))]
+ "reload_completed"
+ [(set (subreg:SI (match_dup 0) 1) (match_dup 1))
+ (set (subreg:SI (match_dup 0) 0)
+ (ashiftrt:SI (match_dup 1) (const_int 31)))]
+ "")
+
(define_expand "extendhisi2"
[(set (match_operand:SI 0 "register_operand" "")
(sign_extend:SI (match_operand:HI 1 "nonimmediate_operand" "")))]