From bf9c70dcf303defd81f4accae2201b6559121ec2 Mon Sep 17 00:00:00 2001 From: John David Anglin Date: Tue, 7 Feb 2006 22:15:30 +0000 Subject: [PATCH] re PR target/26109 (ICE: Segmentation fault (program cc1) compiling _muldi3.o in stage1) 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.. From-SVN: r110724 --- gcc/ChangeLog | 6 ++++++ gcc/config/pa/pa.c | 11 ++++++----- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 16bd9cf906c5..f7bffe4faf67 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ + 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-02 Nick Clifton PR 24376 diff --git a/gcc/config/pa/pa.c b/gcc/config/pa/pa.c index 02d97fd14c3b..db1f601717e3 100644 --- a/gcc/config/pa/pa.c +++ b/gcc/config/pa/pa.c @@ -7533,7 +7533,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) @@ -7570,10 +7571,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"; -- 2.47.2