From: Richard Stallman Date: Thu, 20 May 1993 05:06:12 +0000 (+0000) Subject: (expand_call): Declare and set current_call_is_indirect. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=efd65a8b463eb9d7ef294cb005d603cac6f12f6d;p=gcc.git (expand_call): Declare and set current_call_is_indirect. (emit_library_call, emit_library_call_value): Likewise. From-SVN: r4515 --- diff --git a/gcc/calls.c b/gcc/calls.c index f1cbfc2551c..4e0e4e2b9dc 100644 --- a/gcc/calls.c +++ b/gcc/calls.c @@ -473,6 +473,8 @@ expand_call (exp, target, ignore) CUMULATIVE_ARGS args_so_far; /* Nonzero if a reg parm has been scanned. */ int reg_parm_seen; + /* Nonzero if this is an indirect function call. */ + int current_call_is_indirect = 0; /* Nonzero if we must avoid push-insns in the args for this call. If stack space is allocated for register parameters, but not by the @@ -732,6 +734,15 @@ expand_call (exp, target, ignore) if (fndecl && DECL_NAME (fndecl)) name = IDENTIFIER_POINTER (DECL_NAME (fndecl)); + /* On some machines (such as the PA) indirect calls have a different + calling convention than normal calls. FUNCTION_ARG in the target + description can look at current_call_is_indirect to determine which + calling convention to use. */ + current_call_is_indirect = (fndecl == 0); +#if 0 + = TREE_CODE (TREE_OPERAND (exp, 0)) == NON_LVALUE_EXPR ? 1 : 0; +#endif + #if 0 /* Unless it's a call to a specific function that isn't alloca, if it has one argument, we must assume it might be alloca. */ @@ -2007,6 +2018,8 @@ emit_library_call (va_alist) int old_inhibit_defer_pop = inhibit_defer_pop; int no_queue = 0; rtx use_insns; + /* library calls are never indirect calls. */ + int current_call_is_indirect = 0; va_start (p); orgfun = fun = va_arg (p, rtx); @@ -2261,6 +2274,8 @@ emit_library_call_value (va_alist) rtx use_insns; rtx value; rtx mem_value = 0; + /* library calls are never indirect calls. */ + int current_call_is_indirect = 0; va_start (p); orgfun = fun = va_arg (p, rtx);