diff options
author | Kazu Hirata <kazu@hxi.com> | 2000-07-20 21:34:07 +0000 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 2000-07-20 15:34:07 -0600 |
commit | c59ff527c551ccc7cf500e3095d2b7b111d6c907 (patch) | |
tree | 1df4a1b99c61c0dafac578520a5374e86bc36efc /gcc | |
parent | 591eb4baa804e96d82d1efe46ac363f1972b6e00 (diff) | |
download | gcc-c59ff527c551ccc7cf500e3095d2b7b111d6c907.zip gcc-c59ff527c551ccc7cf500e3095d2b7b111d6c907.tar.gz gcc-c59ff527c551ccc7cf500e3095d2b7b111d6c907.tar.bz2 |
h8300.c (two_insn_adds_subs_operand): Fix a typo.
* h8300.c (two_insn_adds_subs_operand): Fix a typo.
* h8300.h (OK_FOR_T): New.
(EXTRA_CONSTRAINT): Support OK_FOR_T.
* h8300.md: Use inc/dec.[wl] for increment/decrement
by 1 and 2 in HI and SI modes.
From-SVN: r35155
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/config/h8300/h8300.c | 2 | ||||
-rw-r--r-- | gcc/config/h8300/h8300.h | 20 | ||||
-rw-r--r-- | gcc/config/h8300/h8300.md | 24 |
4 files changed, 38 insertions, 16 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6d316d2..6c7c6a3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2000-07-20 Kazu Hirata <kazu@hxi.com> + + * h8300.c (two_insn_adds_subs_operand): Fix a typo. + * h8300.h (OK_FOR_T): New. + (EXTRA_CONSTRAINT): Support OK_FOR_T. + * h8300.md: Use inc/dec.[wl] for increment/decrement + by 1 and 2 in HI and SI modes. + 2000-07-20 Jim Wilson <wilson@cygnus.com> * config/ia64/ia64.h (ASM_OUTPUT_MI_THUNK): Handle DELTA values diff --git a/gcc/config/h8300/h8300.c b/gcc/config/h8300/h8300.c index ba46d04..2688714 100644 --- a/gcc/config/h8300/h8300.c +++ b/gcc/config/h8300/h8300.c @@ -648,7 +648,7 @@ two_insn_adds_subs_operand (op, mode) /* A constant addition/subtraction takes 2 states in QImode, 4 states in HImode, and 6 states in SImode. Thus, the only case we can win is when SImode is used, in which - case, two adds/subs is used, taking 4 states. */ + case, two adds/subs are used, taking 4 states. */ if (mode == SImode && (value == 2 + 1 || value == 4 + 1 diff --git a/gcc/config/h8300/h8300.h b/gcc/config/h8300/h8300.h index 5d35d27..941a8ad 100644 --- a/gcc/config/h8300/h8300.h +++ b/gcc/config/h8300/h8300.h @@ -828,9 +828,17 @@ struct cum_arg #endif -/* Extra constraints - 'U' if for an operand valid for a bset - destination; i.e. a register, register indirect, or the - eightbit memory region (a SYMBOL_REF with an SYMBOL_REF_FLAG set). +/* Extra constraints. */ + +/* 'T' if valid for dec.[wl] on H8/300H and H8/S. Note that, for + inc.[wl], we can use 'K', which has already been defined. */ +#define OK_FOR_T(OP) \ + (GET_CODE (OP) == CONST_INT \ + && (INTVAL (OP) == -1 || INTVAL (OP) == -2)) + +/* 'U' if valid for a bset destination; + i.e. a register, register indirect, or the eightbit memory region + (a SYMBOL_REF with an SYMBOL_REF_FLAG set). On the H8/S 'U' can also be a 16bit or 32bit absolute. */ #define OK_FOR_U(OP) \ @@ -845,8 +853,10 @@ struct cum_arg && GET_CODE (XEXP (XEXP (XEXP (OP, 0), 0), 1)) == CONST_INT) \ && (TARGET_H8300S || SYMBOL_REF_FLAG (XEXP (XEXP (OP, 0), 0))))) -#define EXTRA_CONSTRAINT(OP, C) \ - ((C) == 'U' ? OK_FOR_U (OP) : 0) +#define EXTRA_CONSTRAINT(OP, C) \ + ((C) == 'T' ? OK_FOR_T (OP) : \ + (C) == 'U' ? OK_FOR_U (OP) : \ + 0) /* GO_IF_LEGITIMATE_ADDRESS recognizes an RTL expression that is a valid memory address for an instruction. diff --git a/gcc/config/h8300/h8300.md b/gcc/config/h8300/h8300.md index 91cafa5..e005368 100644 --- a/gcc/config/h8300/h8300.md +++ b/gcc/config/h8300/h8300.md @@ -629,17 +629,19 @@ (set_attr "cc" "none_0hit,none_0hit,clobber,set_zn,set_zn")]) (define_insn "" - [(set (match_operand:HI 0 "register_operand" "=r,r,r,r") - (plus:HI (match_operand:HI 1 "register_operand" "%0,0,0,0") - (match_operand:HI 2 "nonmemory_operand" "L,N,n,r")))] + [(set (match_operand:HI 0 "register_operand" "=r,r,r,r,r,r") + (plus:HI (match_operand:HI 1 "register_operand" "%0,0,0,0,0,0") + (match_operand:HI 2 "nonmemory_operand" "K,T,L,N,n,r")))] "TARGET_H8300H || TARGET_H8300S" "@ + inc.w %2,%T0 + dec.w %G2,%T0 adds %2,%A0 subs %G2,%A0 add.w %T2,%T0 add.w %T2,%T0" - [(set_attr "length" "2,2,4,2") - (set_attr "cc" "none_0hit,none_0hit,set_zn,set_zn")]) + [(set_attr "length" "2,2,2,2,4,2") + (set_attr "cc" "set_znv,set_znv,none_0hit,none_0hit,set_zn,set_zn")]) (define_split [(set (match_operand:HI 0 "register_operand" "") @@ -669,17 +671,19 @@ (set_attr "cc" "clobber")]) (define_insn "addsi_h8300h" - [(set (match_operand:SI 0 "register_operand" "=r,r,r,r") - (plus:SI (match_operand:SI 1 "register_operand" "%0,0,0,0") - (match_operand:SI 2 "nonmemory_operand" "L,N,i,r")))] + [(set (match_operand:SI 0 "register_operand" "=r,r,r,r,r,r") + (plus:SI (match_operand:SI 1 "register_operand" "%0,0,0,0,0,0") + (match_operand:SI 2 "nonmemory_operand" "K,T,L,N,i,r")))] "TARGET_H8300H || TARGET_H8300S" "@ + inc.l %2,%S0 + dec.l %G2,%S0 adds %2,%A0 subs %G2,%A0 add.l %S2,%S0 add.l %S2,%S0" - [(set_attr "length" "2,2,6,2") - (set_attr "cc" "none_0hit,none_0hit,set_zn,set_zn")]) + [(set_attr "length" "2,2,2,2,6,2") + (set_attr "cc" "set_znv,set_znv,none_0hit,none_0hit,set_zn,set_zn")]) (define_split [(set (match_operand:SI 0 "register_operand" "") |