Commit 69c75916 by Alan Modra Committed by Alan Modra

rs6000.c (rs6000_output_function_epilogue): Use a name for the tbtab label that…

rs6000.c (rs6000_output_function_epilogue): Use a name for the tbtab label that depends on the function asm name.

	* config/rs6000/rs6000.c (rs6000_output_function_epilogue): Use a
	name for the tbtab label that depends on the function asm name.
	Don't output tbtab label unless optional_tbtab.
	(output_mi_thunk): Formatting.

From-SVN: r57798
parent adf2ac37
2002-10-04 Alan Modra <amodra@bigpond.net.au>
* config/rs6000/rs6000.c (rs6000_output_function_epilogue): Use a
name for the tbtab label that depends on the function asm name.
Don't output tbtab label unless optional_tbtab.
(output_mi_thunk): Formatting.
2002-10-03 Richard Henderson <rth@redhat.com> 2002-10-03 Richard Henderson <rth@redhat.com>
* config/m68k/m68k.h (OVERRIDE_OPTIONS): Move additional code ... * config/m68k/m68k.h (OVERRIDE_OPTIONS): Move additional code ...
......
...@@ -10967,7 +10967,7 @@ rs6000_output_function_epilogue (file, size) ...@@ -10967,7 +10967,7 @@ rs6000_output_function_epilogue (file, size)
if (DEFAULT_ABI == ABI_AIX && ! flag_inhibit_size_directive if (DEFAULT_ABI == ABI_AIX && ! flag_inhibit_size_directive
&& rs6000_traceback != traceback_none) && rs6000_traceback != traceback_none)
{ {
const char *fname = XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0); const char *fname = NULL;
const char *language_string = lang_hooks.name; const char *language_string = lang_hooks.name;
int fixed_parms = 0, float_parms = 0, parm_info = 0; int fixed_parms = 0, float_parms = 0, parm_info = 0;
int i; int i;
...@@ -10980,15 +10980,17 @@ rs6000_output_function_epilogue (file, size) ...@@ -10980,15 +10980,17 @@ rs6000_output_function_epilogue (file, size)
else else
optional_tbtab = !optimize_size && !TARGET_ELF; optional_tbtab = !optimize_size && !TARGET_ELF;
if (optional_tbtab)
{
fname = XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0);
while (*fname == '.') /* V.4 encodes . in the name */ while (*fname == '.') /* V.4 encodes . in the name */
fname++; fname++;
/* Need label immediately before tbtab, so we can compute its offset /* Need label immediately before tbtab, so we can compute
from the function start. */ its offset from the function start. */
if (*fname == '*')
++fname;
ASM_OUTPUT_INTERNAL_LABEL_PREFIX (file, "LT"); ASM_OUTPUT_INTERNAL_LABEL_PREFIX (file, "LT");
ASM_OUTPUT_LABEL (file, fname); ASM_OUTPUT_LABEL (file, fname);
}
/* The .tbtab pseudo-op can only be used for the first eight /* The .tbtab pseudo-op can only be used for the first eight
expressions, since it can't handle the possibly variable expressions, since it can't handle the possibly variable
...@@ -11160,6 +11162,8 @@ rs6000_output_function_epilogue (file, size) ...@@ -11160,6 +11162,8 @@ rs6000_output_function_epilogue (file, size)
/* Omit this list of longs, because there are no CTL anchors. */ /* Omit this list of longs, because there are no CTL anchors. */
/* Length of function name. */ /* Length of function name. */
if (*fname == '*')
++fname;
fprintf (file, "\t.short %d\n", (int) strlen (fname)); fprintf (file, "\t.short %d\n", (int) strlen (fname));
/* Function name. */ /* Function name. */
...@@ -11285,7 +11289,6 @@ output_mi_thunk (file, thunk_fndecl, delta, function) ...@@ -11285,7 +11289,6 @@ output_mi_thunk (file, thunk_fndecl, delta, function)
TYPE_ATTRIBUTES (TREE_TYPE (function))) TYPE_ATTRIBUTES (TREE_TYPE (function)))
|| lookup_attribute ("shortcall", || lookup_attribute ("shortcall",
TYPE_ATTRIBUTES (TREE_TYPE (function))))) TYPE_ATTRIBUTES (TREE_TYPE (function)))))
{ {
fprintf (file, "\tb %s", prefix); fprintf (file, "\tb %s", prefix);
assemble_name (file, fname); assemble_name (file, fname);
...@@ -11320,7 +11323,7 @@ output_mi_thunk (file, thunk_fndecl, delta, function) ...@@ -11320,7 +11323,7 @@ output_mi_thunk (file, thunk_fndecl, delta, function)
if (TARGET_ELF) if (TARGET_ELF)
function_section (current_function_decl); function_section (current_function_decl);
else else
text_section(); text_section ();
if (TARGET_MINIMAL_TOC) if (TARGET_MINIMAL_TOC)
asm_fprintf (file, (TARGET_32BIT) asm_fprintf (file, (TARGET_32BIT)
? "\t{l|lwz} %s,%s(%s)\n" : "\tld %s,%s(%s)\n", r12, ? "\t{l|lwz} %s,%s(%s)\n" : "\tld %s,%s(%s)\n", r12,
......
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