-f0_hacktable:
- .byte 0x03, 0x11
- .byte 0xDD, 0xB3
- .byte 0x2A, 0x79
- .byte 0x07, 0xAA
- .byte 0x51, 0xC2
-f0_indextable:
- .byte 5*4,7*4,10*4,13*4,14*4
-; .byte 0 ; just for alignment
-f0_s_table:
- .byte 0,1,2,3,4
- .byte 0,1,2,3,4
- .byte 0,1,2,3,4
-; .byte 0
-
-f0:
- movw h0, r26
- movw q0, r28
- movw m0, r30
-;--- DBG
-; push_range 22, 25
-; movw r24, r26
-; ldi r22, 'H'
-; rcall printX
-; pop_range 22, 25
-;--- END DBG
-;--- DBG
-; push_range 22, 25
-; movw r24, r30
-; ldi r22, 'M'
-; rcall printX
-; pop_range 22, 25
-;--- END DBG
- /* xor m into h */
-; ldi r20, 64
- rcall memxor_short
- movw r30, m0
- movw r26, h0
-
- /* set q to zero */
- ldi r22, 64
-10: st Y+, r1
- dec r22
- brne 10b
- movw r28, q0
- /* calculate W and store it in Q */
- ldi r19, 5
-30:
- ldi r18, 16
- /* load initial index */
- ldi r30, lo8(f0_indextable-1)
- ldi r31, hi8(f0_indextable-1)
- add r30, r19
- adc r31, r1
- lpm r16, Z
- /* load values from hacktable */
- ldi r30, lo8(f0_hacktable-2)
- ldi r31, hi8(f0_hacktable-2)
- lsl r19
- add r30, r19
- adc r31, r1
- lsr r19
- lpm r21, Z+
- lpm r20, Z
-40:
- call add_hx_to_w
- subi r16, -4
- andi r16, 0x0f<<2
- dec r18
- brne 40b
- movw r28, q0
- dec r19
- brne 30b
- movw r26, h0
-;--- DBG
-; push_range 22, 25
-; movw r24, r28
-; ldi r22, 'W'
-; rcall printX
-; pop_range 22, 25
-;--- END DBG
- /* xor m into h */
-; ldi r20, 64
- movw r26, h0
- movw r30, m0
- rcall memxor_short
- sbiw r26, 60
-;---
- ldi r30, lo8(f0_s_table)
- ldi r31, hi8(f0_s_table)
- ldi r21, 15
- mov r8, r21
-50:
- rcall load32_from_Y
- sbiw r28, 4
- lpm r20, Z+
- movw r2, r30
- rcall sn
- movw r30, r2
-
- rcall add_X_to_32
- rcall store32_to_Y
-
- dec r8
- brne 50b
-;---
- rcall load32_from_Y
- clr r20
- rcall sn
- movw r30, r2
- movw r26, h0
- rcall add_X_to_32
- sbiw r26, 4
- st -Y, r25
- st -Y, r24
- st -Y, r23
- st -Y, r22
- sbiw r28, 15*4
- movw r20, h0
- movw r22, m0
- ret
+f2_1_shift_table:
+; .byte 0x2B, 0x64, 0x66, 0x03, 0x51, 0x55, 0x87, 0x55
+; .byte 0x55, 0x87, 0x55, 0x51, 0x03, 0x66, 0x64, 0x2B
+ .byte 5, -5, -7, 8, -5, 5, -1, 5, -3, 0, 6, -6, -4, 6, -11, 2
+f2_2_shift_table:
+; .byte (2<<1), (7<<1), (4<<1), (3<<1), (4<<1)+1, (6<<1)+1, (6<<1)
+ .byte 8, -6, 6, 4, -3, -4, -7, -2
+expand2_rot_table:
+ .byte 3,7,13,16,19,23,27