1 bit + 5 bit x3 の lut 構成だが roxr.b #1 を利用することで bit 7 へ代入可能なことに気づいた. これに基づくと計算時間が長いとされた bit 5 から bit 9 への代入が短くなる. clock と dest bit の代入方法は下記となる.
clock dest bit --------------------------------------------------------------------- 118 0 (addx.w) 122 15 (roxr.w #1), 1 (addx.w; add.w), 7(roxr.b #1) 124 14 (roxr.w #2), 6(roxr.b #2) 126 13 (roxr.w #3), 2 (roxl.w #3), 5(roxr.b #3), 8(roxr.b #1; add.w) 128 12 (roxr.w #4), 3 (roxl.w #4), 4(roxr.b #4) 130 11 (roxr.w #5), 9(roxr.b #1; add.w; add.w) 132 10 (roxr.w #6)
移動距離が一番遠いのは bit 10 だと思われる.
#if ... #endif を変更する (見づらい)
8 lea table+0x80(pc),a0 4 moveq #0x3e,d1 4 moveq #0,d0 ;output q 4 add.w d2,d2 ;input d #if delta == 0 4 addx.w d0,d0 #elif delta == 1 4 addx.w d0,d0 4 add.w d0,d0 #elif delta <= 3 roxl.w #delta+1,d0 #elif delta <= 7 roxr.b #8-delta,d0 #elif delta == 8 8 roxr.b #1,d0 4 add.w d0,d0 #elif delta == 9 8 roxr.b #1,d0 4 add.w d0,d0 4 add.w d0,d0 #else roxr.w #16-delta,d0 #endif 4 move.w d2,d3 4 and.w d1,d3 14 or.w (-0x80,a0,d3.w),d0 16 lsr.w #5,d2 4 move.w d2,d3 4 and.w d1,d3 14 or.w (-0x40,a0,d3.w),d0 16 lsr.w #5,d2 4 and.w d1,d2 14 or.w (0,a0,d2.w),d0