Next: RTL Declarations, Previous: Vector Operations, Up: RTL
所有机器模式之间的转换都必须使用显示的转换符来表示。例如,一个表示字节和全字之和的表达式就不能写成(plus:SI (reg:QI 34) (reg:SI 80)),因为plus操作符需要两个具有相同机器模式的操作符。因此,字节长度的操作数被封装在一个转换操作中,如
(plus:SI (sign_extend:SI (reg:QI 34)) (reg:SI 80))
转换符并不仅仅是一个形式上的占位符,因为可能会有多种方式将给出的最初模式转换为期望的最终模式。转换符指出了如何进行这种操作。
对于所有的转换操作,x不能为VOIDmode,因为这样就无法知道如何进行转换操作。转换必须在编译时进行或者x必须被放入寄存器中。
(sign_extend:m x)(zero_extend:m x)(float_extend:m x)(truncate:m x)(ss_truncate:m x)(us_truncate:m x)(float_truncate:m x)(float:m x)(unsigned_float:m x)(fix:m x)当m是一个定点模式时,表示将浮点值x转换为有符号的模式m的结果。具体如何舍入没有做出规定。所以,这个操作可能只是被用在编译C代码时的整数值的操作数。
(unsigned_fix:m x)(fract_convert:m x)(sat_fract:m x)(unsigned_fract_convert:m x)(unsigned_sat_fract:m x)