Next: , Previous: Trampolines, Up: Target Macros


17.13 库例程的隐式调用

这是库函数的隐式调用的说明。

— Macro: DECLARE_LIBRARY_RENAMES

该宏,如果被定义,应该扩展为一块C代码,当编译libgcc.a的函数时被扩展。 其可以被用于提供GCC内部库函数的替代名字,如果有编译应该提供的ABI名字。

— Target Hook: void TARGET_INIT_LIBFUNCS (void)

该钩子应该声明额外的库函数或者重命名存在的, 使用optabs.c中定义的函数set_optab_libfuncinit_one_libfuncinit_optabs调用该宏,在初始化所有正常的库函数之后。

缺省为不作任何事情。大多数port不需要定义该钩子。

— Macro: FLOAT_LIB_COMPARE_RETURNS_BOOL (mode, comparison)

该宏应该返回true,如果实现在模式mode下的浮点比较操作符 comparison的库函数应该返回一个布尔值, 如果应该返回一个三态值则返回false

GCC本身的浮点库从比较运算符中返回三态值,所以缺省总是返回假。 大多数port不需要定义该宏。

— Macro: TARGET_LIB_INT_CMP_BIASED

该宏应该求解为true,如果整型比较函数(像__cmpdi2) 应该返回0来指示第一个操作数比第二个小,1来指示相等, 2来指示第一个操作数大于第二个。如果该宏求解为false, 则比较函数返回-1,0和1,来替代0,1和2。如果target使用libgcc.a中的函数, 则不需要定义该宏。

— Macro: US_SOFTWARE_GOFAST

定义该宏,如果你的系统C库使用US Software GOFAST库来提供浮点模拟。

除了定义该宏以外,你的体系结构必须将TARGET_INIT_LIBFUNCS设为 gofast_maybe_init_libfuncs,或者从那个钩子版本中调用该函数。 其在config/gofast.h中定义, 且必须被你的体系结构的cpu.c文件包含进来。 例如参见sparc/sparc.c

如果该宏被定义, 则TARGET_FLOAT_LIB_COMPARE_RETURNS_BOOL target钩子必须返回假, 对于SFmodeDFmode比较。

— Macro: TARGET_EDOM

target机器上的EDOM的值,作为一个C整型常量表达式。如果没有定义该宏, 则GCC不尝试将EDOM的值直接存放到errno中。 查看/usr/include/errno.h来查找你的系统上的EDOM的值。

如果没有定义TARGET_EDOM则被编译的代码通过调用库函数并使其报告错误, 来报告domain错误。如果对于这样的错误,你系统上的数学函数使用matherr, 则应该不定义TARGET_EDOM,以便matherr被正常使用。

— Macro: GEN_ERRNO_RTX

定义该宏为C表达式来创建一个rtl表达式,来引用全局“变量”errno。 (在一些系统上,errno可能实际不是一个变量。)如果没有定义该宏, 则会使用一个合理的缺省。

— Macro: TARGET_C99_FUNCTIONS

当该宏非0时,GCC将隐式的优化sin调用为sinf, 类似的还有C99标准中定义的其它函数。缺省为非0,这对于大多现代系统是合适的, 然而有一些系统缺少对这些函数的运行时支持,所以它们需要该宏被重定义为0。

— Macro: TARGET_HAS_SINCOS

当该宏非0时, GCC将隐式的优化sincos调用为使用相同参数的sincos调用。 缺省为0。target必须提供下列函数:

          void sincos(double x, double *sin, double *cos);
          void sincosf(float x, float *sin, float *cos);
          void sincosl(long double x, long double *sin, long double *cos);
— Macro: NEXT_OBJC_RUNTIME

定义该宏来使用NeXT系统约定为Objective-C消息发送生成代码。 该调用约定包括将对象,选择者和方法一起传递给方法查询库函数。

缺省调用约定只将对象和选择者传递给查询函数,其返回一个指向方法的指针。