mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-01-27 23:24:36 +08:00
stormy16.h (ASM_OUTPUT_MI_THUNK): Call stormy16_asm_output_mi_thunk.
* config/stormy16/stormy16.h (ASM_OUTPUT_MI_THUNK): Call stormy16_asm_output_mi_thunk. * config/stormy16/stormy16.c (stormy16_asm_output_mi_thunk): New function. * config/stormy16/stormy16-protos.h (stormy16_asm_output_mi_thunk): New prototype. From-SVN: r46762
This commit is contained in:
parent
cb3f834fb6
commit
52560c7b98
@ -1,3 +1,12 @@
|
||||
2001-11-03 Geoffrey Keating <geoffk@redhat.com>
|
||||
|
||||
* config/stormy16/stormy16.h (ASM_OUTPUT_MI_THUNK): Call
|
||||
stormy16_asm_output_mi_thunk.
|
||||
* config/stormy16/stormy16.c (stormy16_asm_output_mi_thunk): New
|
||||
function.
|
||||
* config/stormy16/stormy16-protos.h
|
||||
(stormy16_asm_output_mi_thunk): New prototype.
|
||||
|
||||
2001-11-04 Joseph S. Myers <jsm28@cam.ac.uk>
|
||||
|
||||
* ChangeLog.2, ChangeLog.4, ChangeLog.5, ChangeLog,
|
||||
|
@ -46,6 +46,7 @@ extern void stormy16_expand_builtin_va_start PARAMS ((int, tree, rtx));
|
||||
extern rtx stormy16_expand_builtin_va_arg PARAMS ((tree, tree));
|
||||
extern void stormy16_initialize_trampoline PARAMS ((rtx, rtx, rtx));
|
||||
extern rtx stormy16_function_value PARAMS ((tree, tree));
|
||||
extern void stormy16_asm_output_mi_thunk PARAMS ((FILE *, tree, int, tree));
|
||||
#endif
|
||||
|
||||
#ifdef RTX_CODE
|
||||
|
@ -1335,6 +1335,51 @@ stormy16_function_value (valtype, func)
|
||||
return gen_rtx_REG (mode, RETURN_VALUE_REGNUM);
|
||||
}
|
||||
|
||||
/* A C compound statement that outputs the assembler code for a thunk function,
|
||||
used to implement C++ virtual function calls with multiple inheritance. The
|
||||
thunk acts as a wrapper around a virtual function, adjusting the implicit
|
||||
object parameter before handing control off to the real function.
|
||||
|
||||
First, emit code to add the integer DELTA to the location that contains the
|
||||
incoming first argument. Assume that this argument contains a pointer, and
|
||||
is the one used to pass the `this' pointer in C++. This is the incoming
|
||||
argument *before* the function prologue, e.g. `%o0' on a sparc. The
|
||||
addition must preserve the values of all other incoming arguments.
|
||||
|
||||
After the addition, emit code to jump to FUNCTION, which is a
|
||||
`FUNCTION_DECL'. This is a direct pure jump, not a call, and does not touch
|
||||
the return address. Hence returning from FUNCTION will return to whoever
|
||||
called the current `thunk'.
|
||||
|
||||
The effect must be as if @var{function} had been called directly
|
||||
with the adjusted first argument. This macro is responsible for
|
||||
emitting all of the code for a thunk function;
|
||||
TARGET_ASM_FUNCTION_PROLOGUE and TARGET_ASM_FUNCTION_EPILOGUE are
|
||||
not invoked.
|
||||
|
||||
The THUNK_FNDECL is redundant. (DELTA and FUNCTION have already been
|
||||
extracted from it.) It might possibly be useful on some targets, but
|
||||
probably not. */
|
||||
|
||||
void
|
||||
stormy16_asm_output_mi_thunk (file, thunk_fndecl, delta, function)
|
||||
FILE *file;
|
||||
tree thunk_fndecl ATTRIBUTE_UNUSED;
|
||||
int delta;
|
||||
tree function;
|
||||
{
|
||||
int regnum = FIRST_ARGUMENT_REGISTER;
|
||||
|
||||
/* There might be a hidden first argument for a returned structure. */
|
||||
if (aggregate_value_p (TREE_TYPE (TREE_TYPE (function))))
|
||||
regnum += 1;
|
||||
|
||||
fprintf (file, "\tadd %s,#0x%x\n", reg_names[regnum], (delta) & 0xFFFF);
|
||||
fputs ("\tjmpf ", file);
|
||||
assemble_name (file, XSTR (XEXP (DECL_RTL (function), 0), 0));
|
||||
putc ('\n', file);
|
||||
}
|
||||
|
||||
/* Mark functions with SYMBOL_REF_FLAG. */
|
||||
|
||||
void
|
||||
|
@ -2435,12 +2435,7 @@ typedef int CUMULATIVE_ARGS;
|
||||
FUNCTION instead of jumping to it. The generic approach does not support
|
||||
varargs. */
|
||||
#define ASM_OUTPUT_MI_THUNK(FILE, THUNK_FNDECL, DELTA, FUNCTION) \
|
||||
{ \
|
||||
fprintf (FILE, "\tadd r2,#0x%x\n", (DELTA) & 0xFFFF); \
|
||||
fputs ("\tjmpf ", FILE); \
|
||||
assemble_name (FILE, XSTR (XEXP (DECL_RTL (function), 0), 0)); \
|
||||
putc ('\n', FILE); \
|
||||
}
|
||||
stormy16_asm_output_mi_thunk (FILE, THUNK_FNDECL, DELTA, FUNCTION)
|
||||
|
||||
|
||||
/* Generating Code for Profiling. */
|
||||
|
Loading…
Reference in New Issue
Block a user