Improve PIC pc-relative instruction sequences on hppa.

* sysdeps/hppa/dl-fptr.c (elf_machine_resolve): Remove unnecessary
	depi instruction from PIC pc-relative sequence.
	* sysdeps/hppa/dl-fptr.h (ELF_MACHINE_LOAD_ADDRESS): Likewise.
	* sysdeps/hppa/dl-machine.h (elf_machine_dynamic): Likewise.
	(elf_machine_load_address): Likewise.
	(elf_machine_runtime_setup): Likewise.
This commit is contained in:
John David Anglin 2017-12-02 11:04:16 -05:00
parent d17542d235
commit 800a496acb
4 changed files with 23 additions and 19 deletions

View File

@ -1,3 +1,12 @@
2017-12-02 John David Anglin <danglin@gcc.gnu.org>
* sysdeps/hppa/dl-fptr.c (elf_machine_resolve): Remove unnecessary
depi instruction from PIC pc-relative sequence.
* sysdeps/hppa/dl-fptr.h (ELF_MACHINE_LOAD_ADDRESS): Likewise.
* sysdeps/hppa/dl-machine.h (elf_machine_dynamic): Likewise.
(elf_machine_load_address): Likewise.
(elf_machine_runtime_setup): Likewise.
2017-12-02 Joseph Myers <joseph@codesourcery.com>
* sysdeps/powerpc/power7/fpu/s_logb.c: Include

View File

@ -329,9 +329,8 @@ elf_machine_resolve (void)
Elf32_Addr addr;
asm ("b,l 1f,%0\n"
" depi 0,31,2,%0\n"
"1: addil L'_dl_runtime_resolve - ($PIC_pcrel$0 - 8),%0\n"
" ldo R'_dl_runtime_resolve - ($PIC_pcrel$0 - 12)(%%r1),%0\n"
" addil L'_dl_runtime_resolve - ($PIC_pcrel$0 - 1),%0\n"
"1: ldo R'_dl_runtime_resolve - ($PIC_pcrel$0 - 5)(%%r1),%0\n"
: "=r" (addr) : : "r1");
return addr;

View File

@ -31,9 +31,8 @@ extern void _dl_fptr_init (void);
#define ELF_MACHINE_LOAD_ADDRESS(var, symbol) \
asm ( \
" b,l 1f,%0\n" \
" depi 0,31,2,%0\n" \
"1: addil L'" #symbol " - ($PIC_pcrel$0 - 8),%0\n" \
" ldo R'" #symbol " - ($PIC_pcrel$0 - 12)(%%r1),%0\n" \
" addil L'" #symbol " - ($PIC_pcrel$0 - 1),%0\n" \
"1: ldo R'" #symbol " - ($PIC_pcrel$0 - 5)(%%r1),%0\n" \
: "=&r" (var) : : "r1");
#endif /* !dl_hppa_fptr_h */

View File

@ -81,10 +81,9 @@ elf_machine_dynamic (void)
{
Elf32_Addr dynamic;
asm ("b,l 1f,%0\n"
" depi 0,31,2,%0\n"
"1: addil L'_GLOBAL_OFFSET_TABLE_ - ($PIC_pcrel$0 - 8),%0\n"
" ldw R'_GLOBAL_OFFSET_TABLE_ - ($PIC_pcrel$0 - 12)(%%r1),%0\n"
asm ("bl 1f,%0\n"
" addil L'_GLOBAL_OFFSET_TABLE_ - ($PIC_pcrel$0 - 1),%0\n"
"1: ldw R'_GLOBAL_OFFSET_TABLE_ - ($PIC_pcrel$0 - 5)(%%r1),%0\n"
: "=r" (dynamic) : : "r1");
return dynamic;
@ -100,10 +99,9 @@ elf_machine_load_address (void)
Elf32_Addr dynamic;
asm (
" b,l 1f,%0\n"
" depi 0,31,2,%0\n"
"1: addil L'_DYNAMIC - ($PIC_pcrel$0 - 8),%0\n"
" ldo R'_DYNAMIC - ($PIC_pcrel$0 - 12)(%%r1),%0\n"
" bl 1f,%0\n"
" addil L'_DYNAMIC - ($PIC_pcrel$0 - 1),%0\n"
"1: ldo R'_DYNAMIC - ($PIC_pcrel$0 - 5)(%%r1),%0\n"
: "=r" (dynamic) : : "r1");
return dynamic - elf_machine_dynamic ();
@ -339,14 +337,13 @@ asm ( \
just like a branch reloc. This sequence gets us the \
runtime address of _DYNAMIC. */ \
" bl 0f,%r19\n" \
" depi 0,31,2,%r19\n" /* clear priviledge bits */ \
"0: addil L'_DYNAMIC - ($PIC_pcrel$0 - 8),%r19\n" \
" ldo R'_DYNAMIC - ($PIC_pcrel$0 - 12)(%r1),%r26\n" \
" addil L'_DYNAMIC - ($PIC_pcrel$0 - 1),%r19\n" \
"0: ldo R'_DYNAMIC - ($PIC_pcrel$0 - 5)(%r1),%r26\n" \
\
/* The link time address is stored in the first entry of the \
GOT. */ \
" addil L'_GLOBAL_OFFSET_TABLE_ - ($PIC_pcrel$0 - 16),%r19\n" \
" ldw R'_GLOBAL_OFFSET_TABLE_ - ($PIC_pcrel$0 - 20)(%r1),%r20\n" \
" addil L'_GLOBAL_OFFSET_TABLE_ - ($PIC_pcrel$0 - 9),%r19\n" \
" ldw R'_GLOBAL_OFFSET_TABLE_ - ($PIC_pcrel$0 - 13)(%r1),%r20\n" \
\
" sub %r26,%r20,%r20\n" /* Calculate load offset */ \
\