Bit Boardの回転
この項目では、左上を最上位ビット、そこからまず右に、次に下に向かっていき、右下を最下位ビットとする。
code: axis
0123
4567
89ab
cdef
↓
0b0123456789abcd
回転
90°回転は転置+上下反転・左右反転でできる もっと速い方法があるかも?
45°回転
グリッド状にビットを並べているので、普通の45°回転はできないが、斜め方向に並んだビットを一気に取得することができる。
code:pseudo45ccw
0123
4567
89ab
cdef
↓
05af (05af)
49e3 (49e, 3)
8d27 (8d, 27)
c16b (c, 16b)
実装方法
行ごとにローテート(SIMDでレーンごとにシフト量を指定できる場合など)→転置
マスクを利用して列をローテート、分割統治的にやると高速
code:pseudo45ccw-rotate-cols
0123
4567
89ab
cdef
↓ mask: 0b0011001100110011, rotate: 8
01ab
45ef
8923
cd67
↓ mask: 0b0101010101010101, rotate: 4
05af
49e3
8d27
c16b