From: Wilco Dijkstra Date: Fri, 16 Dec 2016 12:59:41 +0000 (+0000) Subject: Thumb uses a special register allocation order to increase the use of low registers. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=c67b6f268397b2fc20e72da19e276d2b027ddee4;p=gcc.git Thumb uses a special register allocation order to increase the use of low registers. Thumb uses a special register allocation order to increase the use of low registers. Oddly enough, LR appears before R12, which means that LR must be saved and restored even if R12 is available. Swapping R12 and LR means this simple example now uses R12 as a temporary (just like ARM): int f(long long a, long long b) { if (a < b) return 1; return a + b; } gcc/ * config/arm/arm.c (thumb_core_reg_alloc_order): Swap R12 and R14. From-SVN: r243744 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 003f0120607..daa0458c6f2 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2016-12-16 Wilco Dijkstra + + * config/arm/arm.c (thumb_core_reg_alloc_order): Swap R12 and R14. + 2016-12-16 Claudiu Zissulescu * config/arc/arc.md (call_prof): Remove. diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c index 899c001bf89..d0104f99a2e 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -27633,7 +27633,7 @@ arm_mangle_type (const_tree type) static const int thumb_core_reg_alloc_order[] = { 3, 2, 1, 0, 4, 5, 6, 7, - 14, 12, 8, 9, 10, 11 + 12, 14, 8, 9, 10, 11 }; /* Adjust register allocation order when compiling for Thumb. */