From: Jakub Jelinek Date: Tue, 17 Oct 2000 21:45:23 +0000 (+0200) Subject: alpha.h (ASM_OUTPUT_MI_THUNK): Reload gp if needed. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=4c646291f167d209103586e621a35590ffcff6d0;p=gcc.git alpha.h (ASM_OUTPUT_MI_THUNK): Reload gp if needed. * config/alpha/alpha.h (ASM_OUTPUT_MI_THUNK): Reload gp if needed. * config/sparc/sparc.h (ASM_OUTPUT_MI_THUNK): Always use call, make sure linker can relax even the delay slot mov %g1,%o7, fix output formating. From-SVN: r36912 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f542b85e95c..ed52370eb7a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2000-10-17 Jakub Jelinek + + * config/alpha/alpha.h (ASM_OUTPUT_MI_THUNK): Reload gp if needed. + + * config/sparc/sparc.h (ASM_OUTPUT_MI_THUNK): Always use call, make + sure linker can relax even the delay slot mov %g1,%o7, fix output + formating. + 2000-10-17 Kazu Hirata * config/h8300/h8300.md: Remove an unnecessary zero_extend diff --git a/gcc/config/alpha/alpha.h b/gcc/config/alpha/alpha.h index 21d23bbffe4..4d5729e51f2 100644 --- a/gcc/config/alpha/alpha.h +++ b/gcc/config/alpha/alpha.h @@ -2240,6 +2240,9 @@ do { \ const char *fn_name = XSTR (XEXP (DECL_RTL (FUNCTION), 0), 0); \ int reg; \ \ + if (! TARGET_OPEN_VMS && ! TARGET_WINDOWS_NT) \ + fprintf (FILE, "\tldgp $29,0($27)\n"); \ + \ /* Mark end of prologue. */ \ output_end_prologue (FILE); \ \ diff --git a/gcc/config/sparc/sparc.h b/gcc/config/sparc/sparc.h index 93b8aac07df..89adebfdd6a 100644 --- a/gcc/config/sparc/sparc.h +++ b/gcc/config/sparc/sparc.h @@ -3231,42 +3231,15 @@ do { \ Used for C++ multiple inheritance. */ #define ASM_OUTPUT_MI_THUNK(FILE, THUNK_FNDECL, DELTA, FUNCTION) \ do { \ - int big_delta = (DELTA) >= 4096 || (DELTA) < -4096; \ - if (big_delta) \ - fprintf (FILE, "\tset %d,%%g1\n\tadd %%o0,%%g1,%%o0\n", (DELTA)); \ - /* 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) \ - fprintf (FILE, "\tadd %%o0,%d,%%o0\n", DELTA); \ - fprintf (FILE, "\tmov %%o7,%%g1\n"); \ - fprintf (FILE, "\tcall "); \ - assemble_name (FILE, XSTR (XEXP (DECL_RTL (FUNCTION), 0), 0)); \ - fprintf (FILE, ",0\n"); \ - } \ - else if (TARGET_CM_EMBMEDANY) \ - { \ - fprintf (FILE, "\tsetx "); \ - assemble_name (FILE, XSTR (XEXP (DECL_RTL (FUNCTION), 0), 0)); \ - fprintf (FILE, ",%%g5,%%g1\n\tjmp %%g1\n"); \ - } \ - else \ - { \ - fprintf (FILE, "\tsethi %%hi("); \ - assemble_name (FILE, XSTR (XEXP (DECL_RTL (FUNCTION), 0), 0)); \ - fprintf (FILE, "),%%g1\n\tjmp %%g1+%%lo("); \ - assemble_name (FILE, XSTR (XEXP (DECL_RTL (FUNCTION), 0), 0)); \ - fprintf (FILE, ")\n"); \ - } \ - if (!TARGET_CM_EMBMEDANY || flag_pic) \ - fprintf (FILE, "\tmov %%g1,%%o7\n"); \ - else if (big_delta) \ - fprintf (FILE, "\tnop\n"); \ + if ((DELTA) >= 4096 || (DELTA) < -4096) \ + fprintf (FILE, "\tset\t%d, %%g1\n\tadd\t%%o0, %%g1, %%o0\n", (DELTA));\ else \ - fprintf (FILE, "\tadd %%o0,%d,%%o0\n", DELTA); \ + fprintf (FILE, "\tadd\t%%o0, %d, %%o0\n", DELTA); \ + fprintf (FILE, "\tor\t%%o7, %%g0, %%g1\n"); \ + fprintf (FILE, "\tcall\t"); \ + assemble_name (FILE, XSTR (XEXP (DECL_RTL (FUNCTION), 0), 0)); \ + fprintf (FILE, ", 0\n"); \ + fprintf (FILE, "\t or\t%%g1, %%g0, %%o7\n"); \ } while (0) /* Define the parentheses used to group arithmetic operations