| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- #include "textflag.h"
- #define ROUND()\
- ADD.S R2,R0,R0;\
- ADC R3,R1,R1;\
- EOR R2<<13,R0,R8;\
- EOR R3>>19,R8,R8;\
- EOR R2>>19,R1,R11;\
- EOR R3<<13,R11,R11;\
- ADD.S R6,R4,R4;\
- ADC R7,R5,R5;\
- EOR R6<<16,R4,R2;\
- EOR R7>>16,R2,R2;\
- EOR R6>>16,R5,R3;\
- EOR R7<<16,R3,R3;\
- ADD.S R2,R1,R1;\
- ADC R3,R0,R0;\
- EOR R2<<21,R1,R6;\
- EOR R3>>11,R6,R6;\
- EOR R2>>11,R0,R7;\
- EOR R3<<21,R7,R7;\
- ADD.S R8,R4,R4;\
- ADC R11,R5,R5;\
- EOR R8<<17,R4,R2;\
- EOR R11>>15,R2,R2;\
- EOR R8>>15,R5,R3;\
- EOR R11<<17,R3,R3;\
- ADD.S R2,R1,R1;\
- ADC R3,R0,R0;\
- EOR R2<<13,R1,R8;\
- EOR R3>>19,R8,R8;\
- EOR R2>>19,R0,R11;\
- EOR R3<<13,R11,R11;\
- ADD.S R6,R5,R5;\
- ADC R7,R4,R4;\
- EOR R6<<16,R5,R2;\
- EOR R7>>16,R2,R2;\
- EOR R6>>16,R4,R3;\
- EOR R7<<16,R3,R3;\
- ADD.S R2,R0,R0;\
- ADC R3,R1,R1;\
- EOR R2<<21,R0,R6;\
- EOR R3>>11,R6,R6;\
- EOR R2>>11,R1,R7;\
- EOR R3<<21,R7,R7;\
- ADD.S R8,R5,R5;\
- ADC R11,R4,R4;\
- EOR R8<<17,R5,R2;\
- EOR R11>>15,R2,R2;\
- EOR R8>>15,R4,R3;\
- EOR R11<<17,R3,R3;
- // once(d *digest)
- TEXT ·once(SB),NOSPLIT,$4-4
- MOVW d+0(FP),R8
- MOVM.IA (R8),[R0,R1,R2,R3,R4,R5,R6,R7]
- MOVW 48(R8),R12
- MOVW 52(R8),R14
- EOR R12,R6,R6
- EOR R14,R7,R7
- ROUND()
- EOR R12,R0,R0
- EOR R14,R1,R1
- MOVW d+0(FP),R8
- MOVM.IA [R0,R1,R2,R3,R4,R5,R6,R7],(R8)
- RET
- // finalize(d *digest) uint64
- TEXT ·finalize(SB),NOSPLIT,$4-12
- MOVW d+0(FP),R8
- MOVM.IA (R8),[R0,R1,R2,R3,R4,R5,R6,R7]
- MOVW 48(R8),R12
- MOVW 52(R8),R14
- EOR R12,R6,R6
- EOR R14,R7,R7
- ROUND()
- EOR R12,R0,R0
- EOR R14,R1,R1
- EOR $255,R4
- ROUND()
- ROUND()
- EOR R2,R0,R0
- EOR R3,R1,R1
- EOR R6,R4,R4
- EOR R7,R5,R5
- EOR R4,R0,R0
- EOR R5,R1,R1
- MOVW R0,ret_lo+4(FP)
- MOVW R1,ret_hi+8(FP)
- RET
- // blocks(d *digest, data []uint8)
- TEXT ·blocks(SB),NOSPLIT,$4-16
- MOVW d+0(FP),R8
- MOVM.IA (R8),[R0,R1,R2,R3,R4,R5,R6,R7]
- MOVW p+4(FP),R9
- MOVW p_len+8(FP),R11
- ADD R9,R11,R11
- MOVW R11,endp-4(SP)
- AND.S $3,R9,R8
- BNE blocksunaligned
- blocksloop:
- MOVM.IA.W (R9),[R12,R14]
- EOR R12,R6,R6
- EOR R14,R7,R7
- ROUND()
- EOR R12,R0,R0
- EOR R14,R1,R1
- MOVW endp-4(SP),R11
- CMP R11,R9
- BLO blocksloop
- MOVW d+0(FP),R8
- MOVM.IA [R0,R1,R2,R3,R4,R5,R6,R7],(R8)
- RET
- blocksunaligned:
- MOVBU.P 8(R9),R12
- MOVBU -7(R9),R11
- ORR R11<<8,R12,R12
- MOVBU -6(R9),R11
- ORR R11<<16,R12,R12
- MOVBU -5(R9),R11
- ORR R11<<24,R12,R12
- MOVBU -4(R9),R14
- MOVBU -3(R9),R11
- ORR R11<<8,R14,R14
- MOVBU -2(R9),R11
- ORR R11<<16,R14,R14
- MOVBU -1(R9),R11
- ORR R11<<24,R14,R14
- EOR R12,R6,R6
- EOR R14,R7,R7
- ROUND()
- EOR R12,R0,R0
- EOR R14,R1,R1
- MOVW endp-4(SP),R11
- CMP R11,R9
- BLO blocksunaligned
- MOVW d+0(FP),R8
- MOVM.IA [R0,R1,R2,R3,R4,R5,R6,R7],(R8)
- RET
|