diff options
author | John David Anglin <dave.anglin@nrc-cnrc.gc.ca> | 2012-06-03 12:46:44 +0000 |
---|---|---|
committer | John David Anglin <danglin@gcc.gnu.org> | 2012-06-03 12:46:44 +0000 |
commit | a43434ffab6e7983ed1b9233490e38d4a1bc6f1a (patch) | |
tree | bc0a9e5cc20a658cd006bd6480a65ace5676dbad /gcc | |
parent | aba92f5fe08ffe72abe562a42381ab9f089177fa (diff) | |
download | gcc-a43434ffab6e7983ed1b9233490e38d4a1bc6f1a.zip gcc-a43434ffab6e7983ed1b9233490e38d4a1bc6f1a.tar.gz gcc-a43434ffab6e7983ed1b9233490e38d4a1bc6f1a.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/config/pa/pa.c | 6 | ||||
-rw-r--r-- | gcc/config/pa/pa.h | 9 |
3 files changed, 20 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0e10272..09a8923 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2012-06-03 John David Anglin <dave.anglin@nrc-cnrc.gc.ca> + + * 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 <olegendo@gcc.gnu.org> PR target/53512 diff --git a/gcc/config/pa/pa.c b/gcc/config/pa/pa.c index 25ae5d8..9dee55b 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 c52e3d5..d977c64 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) |