OSDN Git Service

* config/h8300/h8300.md (extendqisi2): Change to an expander.
authorkazu <kazu@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 19 Feb 2003 13:00:27 +0000 (13:00 +0000)
committerkazu <kazu@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 19 Feb 2003 13:00:27 +0000 (13:00 +0000)
(*extendqisi2_h8300): New.
(*extendqisi2_h8300hs): Likewise.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@63104 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/h8300/h8300.md

index 405b081..7bd6a72 100644 (file)
@@ -1,5 +1,11 @@
 2003-02-19  Kazu Hirata  <kazu@cs.umass.edu>
 
+       * config/h8300/h8300.md (extendqisi2): Change to an expander.
+       (*extendqisi2_h8300): New.
+       (*extendqisi2_h8300hs): Likewise.
+
+2003-02-19  Kazu Hirata  <kazu@cs.umass.edu>
+
        * config/h8300/h8300-protos.h: Update the prototype for
        split_adds_subs.  Remove the prototypes for
        const_int_le_2_operand and const_int_le_6_operand.
index 817b52d..2332c4b 100644 (file)
   [(set_attr "length" "2")
    (set_attr "cc" "set_znv")])
 
-;; The compiler can synthesize a H8/300H variant of this which is
-;; just as efficient as one that we'd create
-(define_insn "extendqisi2"
+(define_expand "extendqisi2"
   [(set (match_operand:SI 0 "register_operand" "=r,r")
+       (sign_extend:SI (match_operand:QI 1 "register_operand" "")))]
+  ""
+  "")
+
+(define_insn "*extendqisi2_h8300"
+  [(set (match_operand:SI 0 "register_operand" "")
        (sign_extend:SI (match_operand:QI 1 "general_operand_src" "0,g>")))]
   "TARGET_H8300"
   "@
   [(set_attr "length" "8,12")
    (set_attr "cc" "clobber,clobber")])
 
+;; The following pattern is needed because without the pattern, the
+;; combiner would split (sign_extend:SI (reg:QI)) into into two 24-bit
+;; shifts, one ashift and one ashiftrt.
+
+(define_insn_and_split "*extendqisi2_h8300hs"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (sign_extend:SI (match_operand:QI 1 "register_operand" "0")))]
+  "(TARGET_H8300H || TARGET_H8300S)"
+  "#"
+  "&& reload_completed"
+  [(set (match_dup 2)
+       (sign_extend:HI (match_dup 1)))
+   (set (match_dup 0)
+       (sign_extend:SI (match_dup 2)))]
+  "operands[2] = gen_rtx_REG (HImode, REGNO (operands[0]));")
+
 (define_expand "extendhisi2"
   [(set (match_operand:SI 0 "register_operand" "")
        (sign_extend:SI (match_operand:HI 1 "register_operand" "")))]