arm.c (thumb_core_reg_alloc_order): New.
2008-08-04 Paul Brook <paul@codesourcery.com> gcc/ * cofig/arm/arm.c (thumb_core_reg_alloc_order): New. (arm_order_regs_for_local_alloc): New function. * config/arm/arm-protos.h (arm_order_regs_for_local_alloc): Add prototype. * config/arm/arm.h (ORDER_REGS_FOR_LOCAL_ALLOC): Define. From-SVN: r138640
This commit is contained in:
parent
367a9e66e0
commit
795dc4fc90
4 changed files with 37 additions and 0 deletions
|
@ -1,3 +1,11 @@
|
|||
2008-08-04 Paul Brook <paul@codesourcery.com>
|
||||
|
||||
* cofig/arm/arm.c (thumb_core_reg_alloc_order): New.
|
||||
(arm_order_regs_for_local_alloc): New function.
|
||||
* config/arm/arm-protos.h (arm_order_regs_for_local_alloc): Add
|
||||
prototype.
|
||||
* config/arm/arm.h (ORDER_REGS_FOR_LOCAL_ALLOC): Define.
|
||||
|
||||
2008-08-04 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR target/37012
|
||||
|
|
|
@ -208,4 +208,6 @@ extern void arm_lang_object_attributes_init(void);
|
|||
|
||||
extern const char *arm_mangle_type (const_tree);
|
||||
|
||||
extern void arm_order_regs_for_local_alloc (void);
|
||||
|
||||
#endif /* ! GCC_ARM_PROTOS_H */
|
||||
|
|
|
@ -19046,4 +19046,28 @@ arm_mangle_type (const_tree type)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
/* Order of allocation of core registers for Thumb: this allocation is
|
||||
written over the corresponding initial entries of the array
|
||||
initialized with REG_ALLOC_ORDER. We allocate all low registers
|
||||
first. Saving and restoring a low register is usually cheaper than
|
||||
using a call-clobbered high register. */
|
||||
|
||||
static const int thumb_core_reg_alloc_order[] =
|
||||
{
|
||||
3, 2, 1, 0, 4, 5, 6, 7,
|
||||
14, 12, 8, 9, 10, 11, 13, 15
|
||||
};
|
||||
|
||||
/* Adjust register allocation order when compiling for Thumb. */
|
||||
|
||||
void
|
||||
arm_order_regs_for_local_alloc (void)
|
||||
{
|
||||
const int arm_reg_alloc_order[] = REG_ALLOC_ORDER;
|
||||
memcpy(reg_alloc_order, arm_reg_alloc_order, sizeof (reg_alloc_order));
|
||||
if (TARGET_THUMB)
|
||||
memcpy (reg_alloc_order, thumb_core_reg_alloc_order,
|
||||
sizeof (thumb_core_reg_alloc_order));
|
||||
}
|
||||
|
||||
#include "gt-arm.h"
|
||||
|
|
|
@ -1080,6 +1080,9 @@ extern int arm_structure_size_boundary;
|
|||
127 \
|
||||
}
|
||||
|
||||
/* Use different register alloc ordering for Thumb. */
|
||||
#define ORDER_REGS_FOR_LOCAL_ALLOC arm_order_regs_for_local_alloc ()
|
||||
|
||||
/* Interrupt functions can only use registers that have already been
|
||||
saved by the prologue, even if they would normally be
|
||||
call-clobbered. */
|
||||
|
|
Loading…
Add table
Reference in a new issue