diff options
author | Georg-Johann Lay <avr@gjlay.de> | 2011-08-25 13:50:30 +0000 |
---|---|---|
committer | Georg-Johann Lay <gjl@gcc.gnu.org> | 2011-08-25 13:50:30 +0000 |
commit | 61af7eb4d1466f5cf325b3e041386050a45709c9 (patch) | |
tree | c84f7ae0b193c87241637a170b833a56dfc1b06d /gcc | |
parent | f2814222f9fe1f1661773a67101c29ac501d8f93 (diff) | |
download | gcc-61af7eb4d1466f5cf325b3e041386050a45709c9.zip gcc-61af7eb4d1466f5cf325b3e041386050a45709c9.tar.gz gcc-61af7eb4d1466f5cf325b3e041386050a45709c9.tar.bz2 |
avr.c (reg_class_tab): Make local to avr_regno_reg_class.
* config/avr/avr.c (reg_class_tab): Make local to
avr_regno_reg_class. Return smallest register class available.
From-SVN: r178063
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/config/avr/avr.c | 40 |
2 files changed, 29 insertions, 16 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 44fd17c..73ac319 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,4 +1,9 @@ 2011-08-25 Georg-Johann Lay <avr@gjlay.de> + + * config/avr/avr.c (reg_class_tab): Make local to + avr_regno_reg_class. Return smallest register class available. + +2011-08-25 Georg-Johann Lay <avr@gjlay.de> * config/avr/avr.c (STR_PREFIX_P): New Define. (avr_asm_declare_function_name): Use it. diff --git a/gcc/config/avr/avr.c b/gcc/config/avr/avr.c index 649ea0b..7575fc5 100644 --- a/gcc/config/avr/avr.c +++ b/gcc/config/avr/avr.c @@ -281,22 +281,6 @@ avr_option_override (void) init_machine_status = avr_init_machine_status; } -/* return register class from register number. */ - -static const enum reg_class reg_class_tab[]={ - GENERAL_REGS,GENERAL_REGS,GENERAL_REGS,GENERAL_REGS,GENERAL_REGS, - GENERAL_REGS,GENERAL_REGS,GENERAL_REGS,GENERAL_REGS,GENERAL_REGS, - GENERAL_REGS,GENERAL_REGS,GENERAL_REGS,GENERAL_REGS,GENERAL_REGS, - GENERAL_REGS, /* r0 - r15 */ - LD_REGS,LD_REGS,LD_REGS,LD_REGS,LD_REGS,LD_REGS,LD_REGS, - LD_REGS, /* r16 - 23 */ - ADDW_REGS,ADDW_REGS, /* r24,r25 */ - POINTER_X_REGS,POINTER_X_REGS, /* r26,27 */ - POINTER_Y_REGS,POINTER_Y_REGS, /* r28,r29 */ - POINTER_Z_REGS,POINTER_Z_REGS, /* r30,r31 */ - STACK_REG,STACK_REG /* SPL,SPH */ -}; - /* Function to set up the backend function structure. */ static struct machine_function * @@ -310,8 +294,32 @@ avr_init_machine_status (void) enum reg_class avr_regno_reg_class (int r) { + static const enum reg_class reg_class_tab[] = + { + R0_REG, + /* r1 - r15 */ + NO_LD_REGS, NO_LD_REGS, NO_LD_REGS, + NO_LD_REGS, NO_LD_REGS, NO_LD_REGS, NO_LD_REGS, + NO_LD_REGS, NO_LD_REGS, NO_LD_REGS, NO_LD_REGS, + NO_LD_REGS, NO_LD_REGS, NO_LD_REGS, NO_LD_REGS, + /* r16 - r23 */ + SIMPLE_LD_REGS, SIMPLE_LD_REGS, SIMPLE_LD_REGS, SIMPLE_LD_REGS, + SIMPLE_LD_REGS, SIMPLE_LD_REGS, SIMPLE_LD_REGS, SIMPLE_LD_REGS, + /* r24, r25 */ + ADDW_REGS, ADDW_REGS, + /* X: r26, 27 */ + POINTER_X_REGS, POINTER_X_REGS, + /* Y: r28, r29 */ + POINTER_Y_REGS, POINTER_Y_REGS, + /* Z: r30, r31 */ + POINTER_Z_REGS, POINTER_Z_REGS, + /* SP: SPL, SPH */ + STACK_REG, STACK_REG + }; + if (r <= 33) return reg_class_tab[r]; + return ALL_REGS; } |