PATCH for sibcalls on i386

Richard Henderson rth@redhat.com
Mon Sep 23 22:24:00 GMT 2002


On Tue, Sep 24, 2002 at 02:31:40PM +1000, Andreas Bauer wrote:
> > Please consider turning FUNCTION_OK_FOR_SIBCALL into a "target hook"
> > with this patch, too.
> 
> Please, send me more information on this request, if it's important or
> relevant to you.

In target.h, there is a structure struct gcc_target.  Add a 
new member

	bool (*function_ok_for_sibcall) PARAMS ((tree, tree));

just after cannot_modify_jumps_p.  In hooks.c, add a new
function

	bool
	hook_tree_tree_bool_false (a, b)
	     tree a ATTRIBUTE_UNUSED;
	     tree b ATTRIBUTE_UNUSED;
	{
	  return false;
	}

In hooks.h, declare it.  In target-def.h add

	#define TARGET_FUNCTION_OK_FOR_SIBCALL hook_tree_tree_bool_false

just after TARGET_CANNOT_MODIFY_JUMPS_P.  Do not add ifndef wrappers.  

For every target that implements FUNCTION_OK_FOR_SIBCALL, if the
implementation is inline, copy it to a new static function
<cpu>_function_ok_for_sibcall in the cpu.c file.  If the existing
implementation was a function, change it to be static and remove
the declaration in cpu-protos.h.  In either case, add 

	#undef TARGET_FUNCTION_OK_FOR_SIBCALL
	#define TARGET_FUNCTION_OK_FOR_SIBCALL cpu_function_ok_for_sibcall

in some likely looking place before

	struct gcc_target targetm = TARGET_INITIALIZER;

in the cpu.c file.

Now change calls.c to do

	(*targetm.function_ok_for_sibcall) (decl, exp)


r~



More information about the Gcc-patches mailing list