前回のエントリーで説明した書き方では大変分かりにくいので、図で示す。 Aのような配置のとき、128bitレジスタではBに示しているように白と黒をそれぞれ上位と下位64bitにして別々にした形で持っている。 この配置のうち、一番上の一行を16bit整数にする場合を取り上げる。 もちろん一番簡単な方法は0byte目と8byte目を取り出して連結することだが、それでは縦の列を計算する場合別の方法をとらなければならない。また、黒白反転は値を入れ替えればよいものの、左右対称のコードをつくる場合簡単にはいかない。(spu_reverseというような関数があればよかったのだが) そこで汎用性があり、それほど性能的なペナルティもなさそうな方法として、Cに示した以下のような方法を採用した。 spu_shuffleで、一番上の行を下位8bitに、上位8bitが0の16bit整数8つからなるベクトルを生成する(
![Unusual CellBE](https://cdn-ak-scissors.b.st-hatena.com/image/square/06a15c64ba0ceec233d86d71001ebb29a9dcbf5d/height=288;version=1;width=512/https%3A%2F%2Fcdn.blog.st-hatena.com%2Fimages%2Ftheme%2Fog-image-1500.png)