在 x86/SIMD 程序集中,我使用需要转换的图形图像的四个 32 位像素填充了 XMM 寄存器。但是,像素是 10 位压缩 RGB 格式,因此它们以这种形式以 32 位存在:
[ red ][ green ][ blue ][]
RRRRRRRRRRGGGGGGGGGGBBBBBBBBBB00
最后两位是填充位,未使用。
我需要将这些像素乘以另一个值,但该值需要被屏蔽,因此它只会影响红色像素。这个值是常数,所以可以硬编码。假设值为 0.1234。我如何将它放入另一个具有适当掩码的 XMM 寄存器中,以便它只影响每个 32 位段的红色部分?
以图形方式说明,我想做这样的事情:
XMM0 (first 32 bit segment):
[ 0.1234 ][ 1.0 ][ 1.0 ][]
*
XMM1 (first 32 bit segment):
RRRRRRRRRRGGGGGGGGGGBBBBBBBBBB00
结果是 XMM0 和 XMM1 的乘积。当然,这个 32 位段将在整个 XMM 寄存器中复制,我只是在这里指定了前 32 位,所以你明白了。