sha1_lastBlock:
- tst r20
- brne sha1_lastBlock_prolog
cpi r21, 0x02
- brne sha1_lastBlock_prolog
+ brlo sha1_lastBlock_prolog
push r25
push r24
push r23
push r22
+ push r21
+ push r20
rcall sha1_nextBlock
+ pop r20
+ pop r21
pop r22
pop r23
pop r24
pop r25
- clr r21
- clr r22
+ subi r21, 2
+ subi r23, -2
+ rjmp sha1_lastBlock
sha1_lastBlock_prolog:
/* allocate space on stack */
in r30, SPL
inc LoopC
cpi LoopC, 80
brge 1f
- jmp sha1_nextBlock_mainloop
+ rjmp sha1_nextBlock_mainloop
/**************************************/
1:
/* littel patch */
.int 0x8f1bbcdc
.int 0xca62c1d6
sha1_nextBlock_JumpTable:
-jmp sha1_nextBlock_Ch
-jmp sha1_nextBlock_Parity
-jmp sha1_nextBlock_Maj
-jmp sha1_nextBlock_Parity
+rjmp sha1_nextBlock_Ch
+ nop
+rjmp sha1_nextBlock_Parity
+ nop
+rjmp sha1_nextBlock_Maj
+ nop
+rjmp sha1_nextBlock_Parity
/* X and Y still point at a[1] aka b ; return value in tmp1 */
sha1_nextBlock_Ch:
ldd tmp3, Y+7 /* load from d */
and tmp2, tmp3
eor tmp1, tmp2
- /**
- precall
- ldi r24, lo8(ch_str)
- ldi r25, hi8(ch_str)
- call uart_putstr_P
- postcall
- /**/
ret
sha1_nextBlock_Maj:
eor tmp1, tmp2
and tmp3, tmp4
eor tmp1, tmp3
- /**
- precall
- ldi r24, lo8(maj_str)
- ldi r25, hi8(maj_str)
- call uart_putstr_P
- postcall
- /**/
ret
sha1_nextBlock_Parity:
eor tmp1, tmp2
ldd tmp2, Y+7 /* load from d */
eor tmp1, tmp2
-
- /**
- precall
- ldi r24, lo8(parity_str)
- ldi r25, hi8(parity_str)
- call uart_putstr_P
- postcall
- /**/
ret
/*
ch_str: .asciz "\r\nCh"