diff options
| author | denisc <denisc@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-07-13 19:13:55 +0000 |
|---|---|---|
| committer | denisc <denisc@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-07-13 19:13:55 +0000 |
| commit | dd5cfeaff31ed0afa5b7a7d39ec3fc127c2d70e9 (patch) | |
| tree | 11e866ad6f4b905974579d4a1ec4f4241d46285b | |
| parent | fa8b3d85ee937eedce8be1e1bc3b214f2bf1191f (diff) | |
| download | ppe42-gcc-dd5cfeaff31ed0afa5b7a7d39ec3fc127c2d70e9.tar.gz ppe42-gcc-dd5cfeaff31ed0afa5b7a7d39ec3fc127c2d70e9.zip | |
* config/avr/avr.md (strlenhi): PARALLEL keyword removed.
* config/avr/avr.c (legitimate_address_p): Return value changed
from letter to register classes. For better debugging.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@43992 138bc75d-0d04-0410-961f-82ee72b054a4
| -rw-r--r-- | gcc/ChangeLog | 6 | ||||
| -rw-r--r-- | gcc/config/avr/avr.c | 18 | ||||
| -rw-r--r-- | gcc/config/avr/avr.md | 11 |
3 files changed, 21 insertions, 14 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index db0125f9b4e..8be501f3794 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +Fri Jul 13 23:04:00 2001 Denis Chertykov <denisc@overta.ru> + + * config/avr/avr.md (strlenhi): PARALLEL keyword removed. + * config/avr/avr.c (legitimate_address_p): Return value changed + from letter to register classes. For better debugging. + 2001-07-13 Kazu Hirata <kazu@hxi.com> * jump.c (reversed_comparison_code_parts): Fix comment typos. diff --git a/gcc/config/avr/avr.c b/gcc/config/avr/avr.c index 303be94a88d..605360a601b 100644 --- a/gcc/config/avr/avr.c +++ b/gcc/config/avr/avr.c @@ -816,12 +816,14 @@ avr_output_function_epilogue (file, size) machine for a memory operand of mode MODE. */ int +int legitimate_address_p (mode, x, strict) enum machine_mode mode; rtx x; int strict; { - int r = 0; + enum reg_class r = NO_REGS; + if (TARGET_ALL_DEBUG) { fprintf (stderr, "mode: (%s) %s %s %s %s:", @@ -843,9 +845,9 @@ legitimate_address_p (mode, x, strict) } if (REG_P (x) && (strict ? REG_OK_FOR_BASE_STRICT_P (x) : REG_OK_FOR_BASE_NOSTRICT_P (x))) - r = 'R'; + r = POINTER_REGS; else if (CONSTANT_ADDRESS_P (x)) - r = 'S'; + r = ALL_REGS; else if (GET_CODE (x) == PLUS && REG_P (XEXP (x, 0)) && GET_CODE (XEXP (x, 1)) == CONST_INT @@ -857,26 +859,26 @@ legitimate_address_p (mode, x, strict) if (! strict || REGNO (XEXP (x,0)) == REG_Y || REGNO (XEXP (x,0)) == REG_Z) - r = 'Q'; + r = BASE_POINTER_REGS; if (XEXP (x,0) == frame_pointer_rtx || XEXP (x,0) == arg_pointer_rtx) - r = 'Q'; + r = BASE_POINTER_REGS; } else if (frame_pointer_needed && XEXP (x,0) == frame_pointer_rtx) - r = 'U'; + r = POINTER_Y_REGS; } else if ((GET_CODE (x) == PRE_DEC || GET_CODE (x) == POST_INC) && REG_P (XEXP (x, 0)) && (strict ? REG_OK_FOR_BASE_STRICT_P (XEXP (x, 0)) : REG_OK_FOR_BASE_NOSTRICT_P (XEXP (x, 0)))) { - r = 'T'; + r = POINTER_REGS; } if (TARGET_ALL_DEBUG) { fprintf (stderr, " ret = %c\n", r); } - return r; + return r == NO_REGS ? 0 : (int)r; } /* Attempts to replace X with a valid diff --git a/gcc/config/avr/avr.md b/gcc/config/avr/avr.md index cd72f1014dc..a62f679ad2e 100644 --- a/gcc/config/avr/avr.md +++ b/gcc/config/avr/avr.md @@ -224,7 +224,7 @@ { /* One of the ops has to be in a register */ if (!register_operand(operand0, HImode) - && !(register_operand(operand1, HImode) || const0_rtx == operands[1])) + && !(register_operand(operand1, HImode) || const0_rtx == operands[1])) { operands[1] = copy_to_mode_reg(HImode, operand1); } @@ -475,11 +475,10 @@ (set_attr "cc" "clobber,clobber")]) (define_expand "strlenhi" - [(parallel - [(set (match_dup 4) - (unspec:HI [(match_operand:BLK 1 "memory_operand" "") - (match_operand:QI 2 "const_int_operand" "") - (match_operand:HI 3 "immediate_operand" "")] 0))]) + [(set (match_dup 4) + (unspec:HI [(match_operand:BLK 1 "memory_operand" "") + (match_operand:QI 2 "const_int_operand" "") + (match_operand:HI 3 "immediate_operand" "")] 0)) (set (match_dup 4) (plus:HI (match_dup 4) (const_int -1))) (set (match_operand:HI 0 "register_operand" "") |

