From a43434ffab6e7983ed1b9233490e38d4a1bc6f1a Mon Sep 17 00:00:00 2001 From: John David Anglin Date: Sun, 3 Jun 2012 12:46:44 +0000 Subject: [PATCH] pa.h (MAX_PCREL17F_OFFSET): Define. * config/pa/pa.h (MAX_PCREL17F_OFFSET): Define. * config/pa/pa.c (pa_attr_length_millicode_call): Use MAX_PCREL17F_OFFSET instead of fixed offset. (pa_attr_length_call): Likewise. (pa_attr_length_indirect_call): Likewise. From-SVN: r188151 --- gcc/ChangeLog | 8 ++++++++ gcc/config/pa/pa.c | 6 +++--- gcc/config/pa/pa.h | 9 +++++++++ 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0e102728931..09a89236693 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2012-06-03 John David Anglin + + * config/pa/pa.h (MAX_PCREL17F_OFFSET): Define. + * config/pa/pa.c (pa_attr_length_millicode_call): Use + MAX_PCREL17F_OFFSET instead of fixed offset. + (pa_attr_length_call): Likewise. + (pa_attr_length_indirect_call): Likewise. + 2012-06-03 Oleg Endo PR target/53512 diff --git a/gcc/config/pa/pa.c b/gcc/config/pa/pa.c index 25ae5d81f57..9dee55b525d 100644 --- a/gcc/config/pa/pa.c +++ b/gcc/config/pa/pa.c @@ -7457,7 +7457,7 @@ pa_attr_length_millicode_call (rtx insn) return 24; else { - if (!TARGET_LONG_CALLS && distance < 240000) + if (!TARGET_LONG_CALLS && distance < MAX_PCREL17F_OFFSET) return 8; if (TARGET_LONG_ABS_CALL && !flag_pic) @@ -7670,7 +7670,7 @@ pa_attr_length_call (rtx insn, int sibcall) /* pc-relative branch. */ if (!TARGET_LONG_CALLS && ((TARGET_PA_20 && !sibcall && distance < 7600000) - || distance < 240000)) + || distance < MAX_PCREL17F_OFFSET)) length += 8; /* 64-bit plabel sequence. */ @@ -8029,7 +8029,7 @@ pa_attr_length_indirect_call (rtx insn) if (TARGET_FAST_INDIRECT_CALLS || (!TARGET_PORTABLE_RUNTIME && ((TARGET_PA_20 && !TARGET_SOM && distance < 7600000) - || distance < 240000))) + || distance < MAX_PCREL17F_OFFSET))) return 8; if (flag_pic) diff --git a/gcc/config/pa/pa.h b/gcc/config/pa/pa.h index c52e3d50877..d977c64fdb2 100644 --- a/gcc/config/pa/pa.h +++ b/gcc/config/pa/pa.h @@ -1519,3 +1519,12 @@ do { \ #undef TARGET_HAVE_TLS #define TARGET_HAVE_TLS true #endif + +/* The maximum offset in bytes for a PA 1.X pc-relative call to the + head of the preceding stub table. The selected offsets have been + chosen so that approximately one call stub is allocated for every + 86.7 instructions. A long branch stub is two instructions when + not generating PIC code. For HP-UX and ELF targets, PIC stubs are + seven and four instructions, respectively. */ +#define MAX_PCREL17F_OFFSET \ + (flag_pic ? (TARGET_HPUX ? 198164 : 221312) : 240000)