Mips profiling
Kris Warkentin
kewarken@qnx.com
Thu Mar 21 07:32:00 GMT 2002
I've been looking at the following chunk of code from gcc/config/mips/mips.h
and something is puzzling me. The bit about 'mcount pops 2 words from
stack' seems wrong. I believe the first four arguments to a function in
mips will be passed in registers and the stack won't be involved. If I read
this correctly, we're leaking 8 bytes of stack memory per function call.
The other question would be 'why don't we have something in the branch delay
slot of jal _mcount'? Wouldn't this cause problems depending on what this
code was inserted before? Or did removing the '.set noreorder' which used
to be in front of '.set noat' take care of this?
cheers,
Kris
/* Output assembler code to FILE to increment profiler label # LABELNO
for profiling a function entry. */
#define FUNCTION_PROFILER(FILE, LABELNO) \
{ \
if (TARGET_MIPS16) \
sorry ("mips16 function profiling"); \
fprintf (FILE, "\t.set\tnoat\n"); \
fprintf (FILE, "\tmove\t%s,%s\t\t# save current return address\n", \
reg_names[GP_REG_FIRST + 1], reg_names[GP_REG_FIRST + 31]); \
fprintf (FILE, \
"\t%s\t%s,%s,%d\t\t# _mcount pops 2 words from stack\n", \
TARGET_64BIT ? "dsubu" : "subu", \
reg_names[STACK_POINTER_REGNUM], \
reg_names[STACK_POINTER_REGNUM], \
Pmode == DImode ? 16 : 8); \
fprintf (FILE, "\tjal\t_mcount\n"); \
fprintf (FILE, "\t.set\tat\n"); \
}
More information about the Gcc
mailing list