diff options
| author | danglin <danglin@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-02-07 22:09:52 +0000 |
|---|---|---|
| committer | danglin <danglin@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-02-07 22:09:52 +0000 |
| commit | 5925d47a9678680da55feb29ec3f65f045e7408a (patch) | |
| tree | be647bd6ca0753648be30cd91b66b28377dca133 | |
| parent | 9992cb6af5449f18efbf9a402a5cd085d4e34e8e (diff) | |
| download | ppe42-gcc-5925d47a9678680da55feb29ec3f65f045e7408a.tar.gz ppe42-gcc-5925d47a9678680da55feb29ec3f65f045e7408a.zip | |
PR target/26109
* pa.c (attr_length_indirect_call): Don't return length 8 for distances
>= 240000 when generating code for SOM runtime.
(output_indirect_call): Don't use "b,l" instruction for indirect calls
to $$dyncall when generating code for SOM runtime..
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@110721 138bc75d-0d04-0410-961f-82ee72b054a4
| -rw-r--r-- | gcc/ChangeLog | 8 | ||||
| -rw-r--r-- | gcc/config/pa/pa.c | 11 |
2 files changed, 14 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6149afe467b..053e26d6ca2 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2006-02-07 John David Anglin <dave.anglin@nrc-cnrc.gc.ca> + + PR target/26109 + * pa.c (attr_length_indirect_call): Don't return length 8 for distances + >= 240000 when generating code for SOM runtime. + (output_indirect_call): Don't use "b,l" instruction for indirect calls + to $$dyncall when generating code for SOM runtime.. + 2006-02-07 Dirk Mueller <dmueller@suse.com> PR c++/18150 diff --git a/gcc/config/pa/pa.c b/gcc/config/pa/pa.c index 1b90e6bb9f8..b6b1ef74152 100644 --- a/gcc/config/pa/pa.c +++ b/gcc/config/pa/pa.c @@ -7447,7 +7447,8 @@ attr_length_indirect_call (rtx insn) if (TARGET_FAST_INDIRECT_CALLS || (!TARGET_PORTABLE_RUNTIME - && ((TARGET_PA_20 && distance < 7600000) || distance < 240000))) + && ((TARGET_PA_20 && !TARGET_SOM && distance < 7600000) + || distance < 240000))) return 8; if (flag_pic) @@ -7484,10 +7485,10 @@ output_indirect_call (rtx insn, rtx call_dest) the remaining cases. */ if (attr_length_indirect_call (insn) == 8) { - /* The HP linker substitutes a BLE for millicode calls using - the short PIC PCREL form. Thus, we must use %r31 as the - link register when generating PA 1.x code. */ - if (TARGET_PA_20) + /* The HP linker sometimes substitutes a BLE for BL/B,L calls to + $$dyncall. Since BLE uses %r31 as the link register, the 22-bit + variant of the B,L instruction can't be used on the SOM target. */ + if (TARGET_PA_20 && !TARGET_SOM) return ".CALL\tARGW0=GR\n\tb,l $$dyncall,%%r2\n\tcopy %%r2,%%r31"; else return ".CALL\tARGW0=GR\n\tbl $$dyncall,%%r31\n\tcopy %%r31,%%r2"; |

