libc/newlib: Add CUSTOM version and CUSTOM_LOCATION config options and GetCustom
CUSTOM_LOCATION config options only presented in menuconfig if component
CUSTOM version selected.
Signed-off-by: "David Holsgrove" <david.holsgrove@xilinx.com>
[yann.morin.1998@free.fr: fix indentation]
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Message-Id: <d02252752d4dc5e68ae3.1349931202@localhost.localdomain>
PatchWork-Id: 190795
1 diff -durN gcc-3.4.6.orig/gcc/config/arm/arm.c gcc-3.4.6/gcc/config/arm/arm.c
2 --- gcc-3.4.6.orig/gcc/config/arm/arm.c 2007-08-15 22:56:20.000000000 +0200
3 +++ gcc-3.4.6/gcc/config/arm/arm.c 2007-08-15 22:56:20.000000000 +0200
5 return_used_this_function = 0;
8 +/* Return the number (counting from 0) of
9 + the least significant set bit in MASK. */
15 +number_of_first_bit_set (mask)
21 + (mask & (1 << bit)) == 0;
29 arm_output_epilogue (rtx sibling)
31 @@ -8757,27 +8777,47 @@
32 saved_regs_mask |= (1 << PC_REGNUM);
35 - /* Load the registers off the stack. If we only have one register
36 - to load use the LDR instruction - it is faster. */
37 - if (saved_regs_mask == (1 << LR_REGNUM))
39 - /* The exception handler ignores the LR, so we do
40 - not really need to load it off the stack. */
42 - asm_fprintf (f, "\tadd\t%r, %r, #4\n", SP_REGNUM, SP_REGNUM);
44 - asm_fprintf (f, "\tldr\t%r, [%r], #4\n", LR_REGNUM, SP_REGNUM);
46 - else if (saved_regs_mask)
47 + if (saved_regs_mask)
49 - if (saved_regs_mask & (1 << SP_REGNUM))
50 - /* Note - write back to the stack register is not enabled
51 - (ie "ldmfd sp!..."). We know that the stack pointer is
52 - in the list of registers and if we add writeback the
53 - instruction becomes UNPREDICTABLE. */
54 - print_multi_reg (f, "ldmfd\t%r", SP_REGNUM, saved_regs_mask);
55 + /* Load the registers off the stack. If we only have one register
56 + to load use the LDR instruction - it is faster. */
57 + if (bit_count (saved_regs_mask) == 1)
59 + int reg = number_of_first_bit_set (saved_regs_mask);
64 + /* Mustn't use base writeback when loading SP. */
65 + asm_fprintf (f, "\tldr\t%r, [%r]\n", SP_REGNUM, SP_REGNUM);
71 + /* The exception handler ignores the LR, so we do
72 + not really need to load it off the stack. */
73 + asm_fprintf (f, "\tadd\t%r, %r, #4\n", SP_REGNUM, SP_REGNUM);
76 + /* else fall through */
79 + asm_fprintf (f, "\tldr\t%r, [%r], #4\n", reg, SP_REGNUM);
84 - print_multi_reg (f, "ldmfd\t%r!", SP_REGNUM, saved_regs_mask);
86 + if (saved_regs_mask & (1 << SP_REGNUM))
87 + /* Note - write back to the stack register is not enabled
88 + (ie "ldmfd sp!..."). We know that the stack pointer is
89 + in the list of registers and if we add writeback the
90 + instruction becomes UNPREDICTABLE. */
91 + print_multi_reg (f, "ldmfd\t%r", SP_REGNUM, saved_regs_mask);
93 + print_multi_reg (f, "ldmfd\t%r!", SP_REGNUM, saved_regs_mask);
97 if (current_function_pretend_args_size)
98 @@ -11405,22 +11445,6 @@
102 -/* Return the number (counting from 0) of
103 - the least significant set bit in MASK. */
106 -number_of_first_bit_set (int mask)
111 - (mask & (1 << bit)) == 0;
118 /* Generate code to return from a thumb function.
119 If 'reg_containing_return_addr' is -1, then the return address is
120 actually on the stack, at the stack pointer. */