Commit 194faace by Richard Henderson Committed by Richard Henderson

sparc.h (ASM_OUTPUT_MI_THUNK): Move %o7 through %g1 instead of save+restore.

* sparc.h (ASM_OUTPUT_MI_THUNK): Move %o7 through %g1 instead of
save+restore.  Fix pic+big_offset delay slot.  Use "pic" case for
unix always, since we want to be able to thunk to functions in a
shared library from an application.

From-SVN: r17262
parent 975602f8
Tue Dec 30 00:04:49 1997 Richard Henderson <rth@cygnus.com>
* sparc.h (ASM_OUTPUT_MI_THUNK): Move %o7 through %g1 instead of
save+restore. Fix pic+big_offset delay slot. Use "pic" case for
unix always, since we want to be able to thunk to functions in a
shared library from an application.
Mon Dec 29 14:37:31 1997 Ian Lance Taylor <ian@cygnus.com> Mon Dec 29 14:37:31 1997 Ian Lance Taylor <ian@cygnus.com>
* mips/t-ecoff (CROSS_LIBGCC1): Define to libgcc1-asm.a. * mips/t-ecoff (CROSS_LIBGCC1): Define to libgcc1-asm.a.
......
...@@ -3017,11 +3017,15 @@ do { \ ...@@ -3017,11 +3017,15 @@ do { \
int big_delta = (DELTA) >= 4096 || (DELTA) < -4096; \ int big_delta = (DELTA) >= 4096 || (DELTA) < -4096; \
if (big_delta) \ if (big_delta) \
fprintf (FILE, "\tset %d,%%g1\n\tadd %%o0,%%g1,%%o0\n", (DELTA)); \ fprintf (FILE, "\tset %d,%%g1\n\tadd %%o0,%%g1,%%o0\n", (DELTA)); \
if (flag_pic) \ /* Don't use the jmp solution unless we know the target is local to \
the application or shared object. \
XXX: Wimp out and don't actually check anything except if this is \
an embedded target where we assume there are no shared libs. */ \
if (!TARGET_CM_EMBMEDANY || flag_pic) \
{ \ { \
if (! big_delta) \ if (! big_delta) \
fprintf (FILE, "\tadd %%o0,%d,%%o0\n", DELTA); \ fprintf (FILE, "\tadd %%o0,%d,%%o0\n", DELTA); \
fprintf (FILE, "\tsave %%sp,-112,%%sp\n"); \ fprintf (FILE, "\tmov %%o7,%%g1\n"); \
fprintf (FILE, "\tcall "); \ fprintf (FILE, "\tcall "); \
assemble_name \ assemble_name \
(FILE, IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (FUNCTION))); \ (FILE, IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (FUNCTION))); \
...@@ -3044,10 +3048,10 @@ do { \ ...@@ -3044,10 +3048,10 @@ do { \
(FILE, IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (FUNCTION))); \ (FILE, IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (FUNCTION))); \
fprintf (FILE, ")\n"); \ fprintf (FILE, ")\n"); \
} \ } \
if (big_delta) \ if (!TARGET_CM_EMBMEDANY || flag_pic) \
fprintf (FILE, "\tmov %%g1,%%o7\n"); \
else if (big_delta) \
fprintf (FILE, "\tnop\n"); \ fprintf (FILE, "\tnop\n"); \
else if (flag_pic) \
fprintf (FILE, "\trestore\n"); \
else \ else \
fprintf (FILE, "\tadd %%o0,%d,%%o0\n", DELTA); \ fprintf (FILE, "\tadd %%o0,%d,%%o0\n", DELTA); \
} while (0) } while (0)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment