aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Law <law@gcc.gnu.org>1996-02-29 11:17:35 -0700
committerJeff Law <law@gcc.gnu.org>1996-02-29 11:17:35 -0700
commitc3d4f633e6de30191fc1d3db778df83915a9bfdf (patch)
tree4d00403bcc127b267a2b92e7ed460482ff462883
parent7e10a91972739b7acd03e19b74bc338f10fd30d8 (diff)
downloadgcc-c3d4f633e6de30191fc1d3db778df83915a9bfdf.zip
gcc-c3d4f633e6de30191fc1d3db778df83915a9bfdf.tar.gz
gcc-c3d4f633e6de30191fc1d3db778df83915a9bfdf.tar.bz2
pa.h (TARGET_SWITCHES): Add new flags "-mlong-load-store" and "-mno-long-load-store".
* pa.h (TARGET_SWITCHES): Add new flags "-mlong-load-store" and "-mno-long-load-store". (TARGET_LONG_LOAD_STORE): Define. * pa.md (symbolic high part): Handle TARGET_LONG_LOAD_STORE. From-SVN: r11384
-rw-r--r--gcc/config/pa/pa.h6
-rw-r--r--gcc/config/pa/pa.md14
2 files changed, 18 insertions, 2 deletions
diff --git a/gcc/config/pa/pa.h b/gcc/config/pa/pa.h
index 28984be..89697db 100644
--- a/gcc/config/pa/pa.h
+++ b/gcc/config/pa/pa.h
@@ -101,6 +101,10 @@ extern int target_flags;
#define TARGET_SOFT_FLOAT (target_flags & 256)
+/* Use 3-insn load/store sequences for access to large data segments
+ in shared libraries on hpux10. */
+#define TARGET_LONG_LOAD_STORE (target_flags & 512)
+
/* Macro to define tables used to set the flags.
This is a list in braces of pairs in braces,
each pair being { "NAME", VALUE }
@@ -126,6 +130,8 @@ extern int target_flags;
{"no-gas", -128}, \
{"soft-float", 256}, \
{"no-soft-float", -256}, \
+ {"long-load-store", 512}, \
+ {"no-long-load-store", -512},\
{"linker-opt", 0}, \
{ "", TARGET_DEFAULT}}
diff --git a/gcc/config/pa/pa.md b/gcc/config/pa/pa.md
index 724ad13..1aeeb61 100644
--- a/gcc/config/pa/pa.md
+++ b/gcc/config/pa/pa.md
@@ -1693,9 +1693,19 @@
&& ! function_label_operand (operands[1])
&& ! read_only_operand (operands[1])
&& ! flag_pic"
- "addil LR'%H1,%%r27"
+ "*
+{
+ if (TARGET_LONG_LOAD_STORE)
+ return \"addil NLR'%H1,%%r27\;ldo N'%H1(%%r1),%%r1\";
+ else
+ return \"addil LR'%H1,%%r27\";
+}"
[(set_attr "type" "binary")
- (set_attr "length" "4")])
+ (set (attr "length")
+ (if_then_else (eq (symbol_ref "TARGET_LONG_LOAD_STORE") (const_int 0))
+ (const_int 4)
+ (const_int 8)))])
+
;; This is for use in the prologue/epilogue code. We need it
;; to add large constants to a stack pointer or frame pointer.