Next: Aggregate Return, Previous: Register Arguments, Up: Stack and Calling
定义该宏返回一个RTX,用来表示函数返回或者接受数据类型为ret_type的值的 地方。ret_type为一个树节点,表示一个数据类型。 fn_decl_or_type为一个树节点,表示被调用的函数的
FUNCTION_DECL
或者FUNCTION_TYPE
。如果outgoing为假, 则钩子应该计算调用者将要看到返回值的寄存器。否则,钩子应该返回一个RTX, 其表示函数在哪儿返回一个值。在许多机器上,只有
TYPE_MODE (
ret_type)
是相关的。 (实际上,在大多数机器上,标量值不管机器模式如何,都在同一地方返回。) 表达式的值通常为一个硬件寄存器的reg
RTX,为存放返回值的地方。 该值还可以为一个parallel
RTX,如果返回值在多个地方。 对于parallel
形式的解释,参见FUNCTION_ARG
。 m68k port使用了这种parallel
类型来返回指针, 在‘%a0’(规范化位置) 和‘%d0’中。如果
TARGET_PROMOTE_FUNCTION_RETURN
返回真,如果valtype为一个标量类型, 则你必须应用在PROMOTE_MODE
中指定的相同的提升规则。如果确切的知道被调用的函数,则func为它的树节点(
FUNCTION_DECL
); 否则,func为一个空指针。这是的可以使用不同的值返回约定, 对于所有调用都知道的特定的函数。一些target机器具有“寄存器窗口”, 这使得函数返回它的值所用的寄存器与调用者看到值所在的寄存器不同。 对于这样的机器,你应该返回不同的RTX,根据outgoing。
TARGET_FUNCTION_VALUE
不用于返回聚合数据类型的值, 因为这些通过其它方式返回。参见下面的TARGET_STRUCT_VALUE_RTX
以及相关的宏。
一个C表达式,用来创建一个RTX,表示库函数返回模式mode的值的地方。 如果确切的知道被调用的函数,则func为它的树节点(FUNCTION_DECL); 否则func为一个空指针。这使得可以使用不同的值返回约定, 对于所有调用都知道的特定的函数。
注意“库函数”在该上下文中意味着是编译器支持的程序,用于执行算术运算, 其名字由编译器知道并且没有在被编译的C代码中提到。
Define this hook if the back-end needs to know the name of the libcall function in order to determine where the result should be returned.
The mode of the result is given by mode and the name of the called library function is given by fun. The hook should return an RTX representing the place where the library function result will be returned.
If this hook is not defined, then LIBCALL_VALUE will be used.
A C expression that is nonzero if regno is the number of a hard register in which the values of called function may come back.
A register whose use for returning values is limited to serving as the second of a pair (for a value of type
double
, say) need not be recognized by this macro. So for most machines, this definition suffices:#define FUNCTION_VALUE_REGNO_P(N) ((N) == 0)If the machine has register windows, so that the caller and the called function use different registers for the return value, this macro should recognize only the caller's register numbers.
This macro has been deprecated. Use
TARGET_FUNCTION_VALUE_REGNO_P
for a new target instead.
A target hook that return
true
if regno is the number of a hard register in which the values of called function may come back.A register whose use for returning values is limited to serving as the second of a pair (for a value of type
double
, say) need not be recognized by this target hook.If the machine has register windows, so that the caller and the called function use different registers for the return value, this target hook should recognize only the caller's register numbers.
If this hook is not defined, then FUNCTION_VALUE_REGNO_P will be used.