From 1df8f58fafb0cc8221a9828239fde24dcb9e9cc1 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Thu, 2 May 1996 00:57:29 +0000 Subject: [PATCH] (ASM_OUTPUT_MI_THUNK): Fix for sparc64, optimize. From-SVN: r11913 --- gcc/config/sparc/sparc.h | 34 ++++++++++++++++++++++++---------- 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/gcc/config/sparc/sparc.h b/gcc/config/sparc/sparc.h index 84b48117cb4..01965e36066 100644 --- a/gcc/config/sparc/sparc.h +++ b/gcc/config/sparc/sparc.h @@ -2948,16 +2948,30 @@ do { \ /* Output code to add DELTA to the first argument, and then jump to FUNCTION. 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); \ - fprintf (FILE, "\tset "); \ - assemble_name (FILE, IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (FUNCTION))); \ - fprintf (FILE, ",%%g1\n\tjmp %%g1\n");\ - if (big_delta) fprintf (FILE, "\tnop\n"); \ - else fprintf (FILE, "\tadd %%o0,%d,%%o0\n", DELTA); \ +#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)); \ + if (TARGET_MEDANY || TARGET_FULLANY) \ + { \ + fprintf (FILE, "\tsetx "); \ + assemble_name \ + (FILE, IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (FUNCTION))); \ + fprintf (FILE, ",%%g5,%%g1\n\tjmp %%g1\n"); \ + } \ + else \ + { \ + fprintf (FILE, "\tsethi %%hi("); \ + assemble_name \ + (FILE, IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (FUNCTION))); \ + fprintf (FILE, "),%%g1\n\tjmp %%g1+%%lo("); \ + assemble_name \ + (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); \ } while (0) /* Define the parentheses used to group arithmetic operations -- 2.30.2