diff options
author | Miod Vallat <miod@cvs.openbsd.org> | 2008-11-04 20:52:29 +0000 |
---|---|---|
committer | Miod Vallat <miod@cvs.openbsd.org> | 2008-11-04 20:52:29 +0000 |
commit | 0cdfe2144d480af8907ca96f2ab595f144a87c13 (patch) | |
tree | fdc540a92a5a48dc1ca2234f02d8264c63d164dc /gnu/egcs/gcc | |
parent | f4ffd126dfcba0e1dd82b899148c850c0093e30a (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.md | 15 |
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" "")))] |