From b98507f71c3f205625597520ef71f06a8afea3a2 Mon Sep 17 00:00:00 2001 From: John David Anglin Date: Sun, 17 Jun 2012 01:33:06 +0000 Subject: [PATCH] backport: pa.h (MAX_PCREL17F_OFFSET): Define. Backport from mainline: 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. From-SVN: r188702 --- gcc/ChangeLog | 11 +++++++++++ gcc/config/pa/pa.c | 6 +++--- gcc/config/pa/pa.h | 9 +++++++++ 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 23660deef80b..3ead1f150f89 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,14 @@ +2012-06-16 John David Anglin + + Backport from mainline: + 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-12 Christian Bruel PR target/53621 diff --git a/gcc/config/pa/pa.c b/gcc/config/pa/pa.c index 6f67ca8ea345..83e6e859e780 100644 --- a/gcc/config/pa/pa.c +++ b/gcc/config/pa/pa.c @@ -7544,7 +7544,7 @@ 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) @@ -7757,7 +7757,7 @@ 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. */ @@ -8116,7 +8116,7 @@ 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 012186854de5..e59cd5d45780 100644 --- a/gcc/config/pa/pa.h +++ b/gcc/config/pa/pa.h @@ -1563,3 +1563,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) -- 2.47.2