diff options
author | Jason Merrill <merrill@gnu.org> | 1997-06-03 19:20:28 +0000 |
---|---|---|
committer | Jason Merrill <merrill@gnu.org> | 1997-06-03 19:20:28 +0000 |
commit | fd407cd21dca4662e40c8d5737b8d604ba2087a2 (patch) | |
tree | f51b444a51b702122f9fdb786e25bf45880673f0 /gcc | |
parent | 39379e67c7d1f9f52e9531c815a79b24b649afe6 (diff) | |
download | gcc-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.h | 20 |
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 |