diff options
author | Jim Wilson <wilson@gcc.gnu.org> | 1997-04-30 16:45:13 -0700 |
---|---|---|
committer | Jim Wilson <wilson@gcc.gnu.org> | 1997-04-30 16:45:13 -0700 |
commit | 3cce8bc65cfe0e5d4edbe644fce071755184db0c (patch) | |
tree | b60eebec9a5a00063047a4fee736cf6ff8fa72bc | |
parent | ad4ff31086d8e338ebd7b30725145f6ad57d63ae (diff) | |
download | gcc-3cce8bc65cfe0e5d4edbe644fce071755184db0c.zip gcc-3cce8bc65cfe0e5d4edbe644fce071755184db0c.tar.gz gcc-3cce8bc65cfe0e5d4edbe644fce071755184db0c.tar.bz2 |
(paradoxical_extendhidi2, paradoxical_extendqidi2): New patterns.
From-SVN: r13995
-rw-r--r-- | gcc/config/mips/mips.md | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/gcc/config/mips/mips.md b/gcc/config/mips/mips.md index d74edf7..1abd60b 100644 --- a/gcc/config/mips/mips.md +++ b/gcc/config/mips/mips.md @@ -2497,6 +2497,36 @@ move\\t%0,%z4\\n\\ (set_attr "mode" "DI") (set_attr "length" "1,1,2")]) +;; These can be created when a paradoxical subreg operand with an implicit +;; sign_extend operator is reloaded. Because of the subreg, this is really +;; a zero extend. +;; ??? It might be possible to eliminate the need for these patterns by adding +;; more support to reload for implicit sign_extend operators. +(define_insn "*paradoxical_extendhidi2" + [(set (match_operand:DI 0 "register_operand" "=d,d") + (sign_extend:DI + (subreg:SI (match_operand:HI 1 "memory_operand" "R,m") 0)))] + "TARGET_64BIT" + "* +{ + return mips_move_1word (operands, insn, TRUE); +}" + [(set_attr "type" "load,load") + (set_attr "mode" "DI") + (set_attr "length" "1,2")]) + +(define_insn "*paradoxical_extendqidi2" + [(set (match_operand:DI 0 "register_operand" "=d,d") + (sign_extend:DI + (subreg:SI (match_operand:QI 1 "memory_operand" "R,m") 0)))] + "TARGET_64BIT" + "* +{ + return mips_move_1word (operands, insn, TRUE); +}" + [(set_attr "type" "load,load") + (set_attr "mode" "DI") + (set_attr "length" "1,2")]) ;; ;; .................... |