aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <merrill@gnu.org>1997-06-03 19:20:28 +0000
committerJason Merrill <merrill@gnu.org>1997-06-03 19:20:28 +0000
commitfd407cd21dca4662e40c8d5737b8d604ba2087a2 (patch)
treef51b444a51b702122f9fdb786e25bf45880673f0 /gcc
parent39379e67c7d1f9f52e9531c815a79b24b649afe6 (diff)
downloadgcc-fd407cd21dca4662e40c8d5737b8d604ba2087a2.zip
gcc-fd407cd21dca4662e40c8d5737b8d604ba2087a2.tar.gz
gcc-fd407cd21dca4662e40c8d5737b8d604ba2087a2.tar.bz2
x
From-SVN: r14143
Diffstat (limited to 'gcc')
-rw-r--r--gcc/config/sparc/sparc.h20
1 files changed, 17 insertions, 3 deletions
diff --git a/gcc/config/sparc/sparc.h b/gcc/config/sparc/sparc.h
index 708060f..f0efe62 100644
--- a/gcc/config/sparc/sparc.h
+++ b/gcc/config/sparc/sparc.h
@@ -2982,7 +2982,17 @@ do { \
int big_delta = (DELTA) >= 4096 || (DELTA) < -4096; \
if (big_delta) \
fprintf (FILE, "\tset %d,%%g1\n\tadd %%o0,%%g1,%%o0\n", (DELTA)); \
- if (TARGET_MEDANY || TARGET_FULLANY) \
+ if (flag_pic) \
+ { \
+ if (! big_delta) \
+ fprintf (FILE, "\tadd %%o0,%d,%%o0\n", DELTA); \
+ fprintf (FILE, "\tsave %%sp,-112,%%sp\n"); \
+ fprintf (FILE, "\tcall "); \
+ assemble_name \
+ (FILE, IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (FUNCTION))); \
+ fprintf (FILE, ",0\n"); \
+ } \
+ else if (TARGET_MEDANY || TARGET_FULLANY) \
{ \
fprintf (FILE, "\tsetx "); \
assemble_name \
@@ -2999,8 +3009,12 @@ do { \
(FILE, IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (FUNCTION))); \
fprintf (FILE, ")\n"); \
} \
- if (big_delta) fprintf (FILE, "\tnop\n"); \
- else fprintf (FILE, "\tadd %%o0,%d,%%o0\n", DELTA); \
+ if (big_delta) \
+ fprintf (FILE, "\tnop\n"); \
+ else if (flag_pic) \
+ fprintf (FILE, "\trestore\n"); \
+ else \
+ fprintf (FILE, "\tadd %%o0,%d,%%o0\n", DELTA); \
} while (0)
/* Define the parentheses used to group arithmetic operations