Next: , Previous: Comparisons, Up: RTL


10.11 位域

有专门的表达式代码来表示位域指令。

(sign_extract:m loc size pos)
这表示了对在loc处包含的或者起始的符号扩展位域的引用(内存或者寄存器引用)。位域为size个位数宽并且在位pos处起始。编译选项BITS_BIG_ENDIAN指明了pos从内存单元的那个端开始。

如果loc在内存中,则它的机器模式必须为一个单个字节的整数机器模式。如果loc在寄存器中,则使用的机器模式是通过insv或者extv指令模式的操作数来指定的(参见Standard Names)并且通常为一个全字的整数机器模式,这当没有任何指定的时候为缺省的。

pos的机器模式为机器特定的并且总是在insv或者extv指令模式中被指定。

机器模式mloc所使用的相同,如果它是在寄存器中。

在RTL中,sign_extract不可以作为左值或者是其中的一部分出现。


(zero_extract:m loc size pos)
类似sign_extract,但是指向一个无符号或者零扩展的位域。相同的位序列被抽取,但是它们被填充到一个整字中,并使用零扩展而不是符号扩展。

不像sign_extract,该表达式的类型可以在RTL中为左值;它们可以出现在一个赋值的左边,来表明在一个指定的位域插入一个值。