Next: Uninitialized Data, Previous: File Framework, Up: Assembler Format
这些钩子指定了用于创建特定类型的整数对象的汇编伪指令。
TARGET_ASM_BYTE_OP
伪指令创建一个字节大小的对象,TARGET_ASM_ALIGNED_HI_OP
创建一个两个字节对齐的对象,等等。 这些钩子都可以为NULL
,这表示没有合适的伪指令。编译器将在一个新行中的起始处打印这些字符串,随后紧跟对象的初始化值。 大多数情况下,字符串应该包含一个tab,一个伪操作符,然后是另一个tab。
函数
assemble_integer
使用该钩子来输出一个整数对象。x为对象的值, size为它的以字节为单位的大小,aligned_p指示其是否为对齐的。 函数应该返回真,如果它能够输出对象。如果返回假, 则assemble_integer
将尝试把对象分割为更小的部分。该钩子的缺省实现将使用
TARGET_ASM_BYTE_OP
字符串家族, 当相应字符串为NULL
时返回假。
A target hook to recognize rtx patterns that
output_addr_const
can't deal with, and output assembly code to file corresponding to the pattern x. This may be used to allow machine-dependentUNSPEC
s to appear within constants.If target hook fails to recognize a pattern, it must return
false
, so that a standard error message is printed. If it prints an error message itself, by calling, for example,output_operand_lossage
, it may just returntrue
.
一条C语句用来识别
output_addr_const
不能处理的rtx模式, 并输出汇编代码到模式x对应的stream中。 这可以用来允许在常量中出现机器相关的UNSPEC
。如果
OUTPUT_ADDR_CONST_EXTRA
没有能够识别出指令模式, 其必须goto fail
, 这样就会打印出一个标准错误消息。 如果其本身打印了一个错误消息, 例如通过调用output_operand_lossage
,其可以正常的结束。
一条C语句,用来输出到stdio流stream中一条汇编指令, 以组合一个在ptr处包含len个字节的字符串常量。 ptr将为一个
char *
类型的C表达式, len为一个int
型的C表达式。如果汇编器具有一个
.ascii
伪指令,正如在Berkeley Unix汇编器上的, 则不要定义宏ASM_OUTPUT_ASCII
。
一条C语句,用来输出decl的函数描述符的字n。 这必须在定义
TARGET_VTABLE_USES_DESCRIPTORS
时被定义,否则将不起作用。
你可以定义该宏为一个C表达式。你应该定义表达式具有非零值, 如果GCC应该在输出函数的代码前,输出常量池,或者定义为0, 如果GCC应该在函数后输出常量池。如果你不定义该宏,则通常情况下, GCC将在函数前输出常量池。
一条C语句,用来输出汇编命令,以定义函数的常量池的起始。 funname为一个字符串,给定了函数的名字。如果需要函数的返回类型, 则可以通过fundecl来获得。 size为在该调用之后要立即写入的常量池的大小,以字节为单位。
通常情况下,如果不需要常量池前缀,该宏不需要被定义。
一条C语句(带有或者不带有分号),用来输出一个常量在常量池中, 如果其需要特殊的处理。(该宏对于可以正常输出的RTL表达式不需要做任何事情。)
参数file为将汇编代码输出到的标准I/O流。x为要输出的常量的RTL表达式, mode为机器模式(用于x为‘const_int’时)。 align为值x所需要的对齐;你应该输出一个汇编伪指令来执行该对齐。
参数labelno为该池中实体的地址的内部标号的编号。 该宏的定义负责在合适的地方输出标号的定义。这里有一个实现的例子:
(*targetm.asm_out.internal_label)
(file, "LC", labelno);当你专门输出一个池中实体时,你应该结束于一个
goto
, 以跳转到标号jumpto。这将阻止相同的池中实体通过通常的方式被再一次输出。如果不做任何事情,则不要定义该宏。
一条C语句,用来输出汇编命令到函数常量池的结尾。funname为一个字符串, 给出了函数的名字。如果需要函数的返回类型,可以通过fundecl来获得。 size为GCC在该调用之前立即写入的常量池的大小,以字节为单位。
通常情况下,如果不需要常量池结束语,则不需要定义该宏。
定义该宏为一个C表达式,其为非零,如果C被汇编器用作逻辑行分隔符。 STR指向在字符串中C被发现的位置; 这可以用于行分隔符使用多个字符的时候。
如果你不定义该宏,则缺省的为只将字符‘;’作为逻辑行的分隔符。
这些target钩子为C字符串常量,描述了算术表达式组合的汇编语法。 如果没有被覆盖,它们缺省为通常的括号,这对大多数汇编器都是正确的。
这些宏由real.h提供,用于写ASM_OUTPUT_DOUBLE
等的定义:
这些将类型为
REAL_VALUE_TYPE
的x,转换为target的浮点表示, 并将其存储在变量l中。 对于REAL_VALUE_TO_TARGET_SINGLE
和REAL_VALUE_TO_TARGET_DECIMAL32
, 该变量应该为一个简单的long int
。对于其它的, 其应该为一个long int
的数组。 该数组的元素个数由所需要的target浮点数据类型的大小决定: 每个long int
数组元素有32位。每个数组元素存放32位的结果, 即使long int
在host机器上比32位宽。数组元素值被设计成, 可以使用
fprintf
按照在target机器内存中的顺序来打印它们。