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)