aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn David Anglin <dave.anglin@nrc-cnrc.gc.ca>2012-06-03 12:46:44 +0000
committerJohn David Anglin <danglin@gcc.gnu.org>2012-06-03 12:46:44 +0000
commita43434ffab6e7983ed1b9233490e38d4a1bc6f1a (patch)
treebc0a9e5cc20a658cd006bd6480a65ace5676dbad
parentaba92f5fe08ffe72abe562a42381ab9f089177fa (diff)
downloadgcc-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
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/config/pa/pa.c6
-rw-r--r--gcc/config/pa/pa.h9
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)