diff options
author | Chris Young <chris@unsatisfactorysoftware.co.uk> | 2018-08-08 17:33:20 +0100 |
---|---|---|
committer | Chris Young <chris@unsatisfactorysoftware.co.uk> | 2018-08-08 17:33:20 +0100 |
commit | 893d5d1f193af671dc30d9a023f0986932ce8e20 (patch) | |
tree | 070afc4d369e639be890fac973a578b9c182731c /sdk/recipes/files/openssl/m68k-unknown-amigaos/crypto | |
parent | 3da666dfb511af5c936e2f253e0ea8c3e22a7a30 (diff) | |
parent | a6cd4d1e9f3ac2eb6e729c20b589227549eba42e (diff) | |
download | toolchains-893d5d1f193af671dc30d9a023f0986932ce8e20.tar.gz toolchains-893d5d1f193af671dc30d9a023f0986932ce8e20.tar.bz2 |
Merge branch 'master' of git://git.netsurf-browser.org/toolchains into chris/http2chris/http2
Diffstat (limited to 'sdk/recipes/files/openssl/m68k-unknown-amigaos/crypto')
-rw-r--r-- | sdk/recipes/files/openssl/m68k-unknown-amigaos/crypto/bn/asm/bn_m68k.s | 1604 | ||||
-rw-r--r-- | sdk/recipes/files/openssl/m68k-unknown-amigaos/crypto/rand/rand_amiga.c | 189 |
2 files changed, 1793 insertions, 0 deletions
diff --git a/sdk/recipes/files/openssl/m68k-unknown-amigaos/crypto/bn/asm/bn_m68k.s b/sdk/recipes/files/openssl/m68k-unknown-amigaos/crypto/bn/asm/bn_m68k.s new file mode 100644 index 0000000..effdc6a --- /dev/null +++ b/sdk/recipes/files/openssl/m68k-unknown-amigaos/crypto/bn/asm/bn_m68k.s @@ -0,0 +1,1604 @@ +/* Copyright (C) 2002 by Howard Chu <hyc@highlandsun.com> + * + * Rights for redistribution and usage in source and binary forms are + * granted according to the OpenSSL license. Warranty of any kind is + * disclaimed. + */ + +/* This file is written for GNU as. All of the code is hand written by + * me. The code is suitable for Motorola 68020-68060 and all CPU32-based + * processors providing 64-bit multiply/divide instructions. On a 68030 + * this code is over 4 times faster than the gcc -O3 code for RSA/DSA. + * I haven't paid any attention to instruction sequencing; there may be + * room for some further improvement. + */ + +.text + .even +.globl _bn_mul_add_words +_bn_mul_add_words: + movm.l #0x3c00,-(sp) + move.l 20(sp),a0 + move.l 24(sp),a1 + clr.l d0 + move.l d0,d5 /* Keep a 0 handy for addx carry bits */ + move.l 28(sp),d4 + jble 3f + + move.l 32(sp),d3 + moveq.l #-4,d2 + and.l d4,d2 + jbeq 2f +1: + move.l d3,d1 + mulu.l (a1)+,d2:d1 + add.l d0,d1 + addx.l d5,d2 + add.l (a0),d1 + addx.l d5,d2 + move.l d1,(a0)+ + move.l d2,d0 + + move.l d3,d1 + mulu.l (a1)+,d2:d1 + add.l d0,d1 + addx.l d5,d2 + add.l (a0),d1 + addx.l d5,d2 + move.l d1,(a0)+ + move.l d2,d0 + + move.l d3,d1 + mulu.l (a1)+,d2:d1 + add.l d0,d1 + addx.l d5,d2 + add.l (a0),d1 + addx.l d5,d2 + move.l d1,(a0)+ + move.l d2,d0 + + move.l d3,d1 + mulu.l (a1)+,d2:d1 + add.l d0,d1 + addx.l d5,d2 + add.l (a0),d1 + addx.l d5,d2 + move.l d1,(a0)+ + move.l d2,d0 + + moveq.l #-4,d2 + add.l d2,d4 + and.l d4,d2 + jbne 1b +2: + tst.l d4 + jbeq 3f + + move.l d3,d1 + mulu.l (a1)+,d2:d1 + add.l d0,d1 + addx.l d5,d2 + add.l (a0),d1 + addx.l d5,d2 + move.l d1,(a0)+ + move.l d2,d0 + + subq.l #1,d4 + jbeq 3f + + move.l d3,d1 + mulu.l (a1)+,d2:d1 + add.l d0,d1 + addx.l d5,d2 + add.l (a0),d1 + addx.l d5,d2 + move.l d1,(a0)+ + move.l d2,d0 + + subq.l #1,d4 + jbeq 3f + + move.l d3,d1 + mulu.l (a1)+,d2:d1 + add.l d0,d1 + addx.l d5,d2 + add.l (a0),d1 + addx.l d5,d2 + move.l d1,(a0)+ + move.l d2,d0 +3: + movm.l (sp)+,#0x003c + rts + + .even +.globl _bn_mul_words +_bn_mul_words: + movm.l #0x3c00,-(sp) + move.l 20(sp),a0 + move.l 24(sp),a1 + clr.l d0 + move.l d0,d5 + move.l 28(sp),d4 + jble 3f + + move.l 32(sp),d3 + moveq.l #-4,d2 + and.l d4,d2 + jbeq 2f +1: + move.l d3,d1 + mulu.l (a1)+,d2:d1 + add.l d0,d1 + addx.l d5,d2 + move.l d1,(a0)+ + move.l d2,d0 + + move.l d3,d1 + mulu.l (a1)+,d2:d1 + add.l d0,d1 + addx.l d5,d2 + move.l d1,(a0)+ + move.l d2,d0 + + move.l d3,d1 + mulu.l (a1)+,d2:d1 + add.l d0,d1 + addx.l d5,d2 + move.l d1,(a0)+ + move.l d2,d0 + + move.l d3,d1 + mulu.l (a1)+,d2:d1 + add.l d0,d1 + addx.l d5,d2 + move.l d1,(a0)+ + move.l d2,d0 + + moveq.l #-4,d2 + add.l d2,d4 + and.l d4,d2 + jbne 1b +2: + tst.l d4 + jbeq 3f + + move.l d3,d1 + mulu.l (a1)+,d2:d1 + add.l d0,d1 + addx.l d5,d2 + move.l d1,(a0)+ + move.l d2,d0 + + subq.l #1,d4 + jbeq 3f + + move.l d3,d1 + mulu.l (a1)+,d2:d1 + add.l d0,d1 + addx.l d5,d2 + move.l d1,(a0)+ + move.l d2,d0 + + subq.l #1,d4 + jbeq 3f + + move.l d3,d1 + mulu.l (a1)+,d2:d1 + add.l d0,d1 + addx.l d5,d2 + move.l d1,(a0)+ + move.l d2,d0 +3: + movm.l (sp)+,#0x003c + rts + + .even +.globl _bn_sqr_words +_bn_sqr_words: + move.l d2,-(sp) + move.l 8(sp),a0 + move.l 12(sp),a1 + move.l 16(sp),d2 + jble 3f + + moveq.l #-4,d1 + and.l d2,d1 + jbeq 2f +1: + move.l (a1)+,d0 + mulu.l d0,d1:d0 + move.l d0,(a0)+ + move.l d1,(a0)+ + + move.l (a1)+,d0 + mulu.l d0,d1:d0 + move.l d0,(a0)+ + move.l d1,(a0)+ + + move.l (a1)+,d0 + mulu.l d0,d1:d0 + move.l d0,(a0)+ + move.l d1,(a0)+ + + move.l (a1)+,d0 + mulu.l d0,d1:d0 + move.l d0,(a0)+ + move.l d1,(a0)+ + + moveq.l #-4,d1 + add.l d1,d2 + and.l d2,d1 + jbne 1b +2: + tst.l d2 + jbeq 3f + + move.l (a1)+,d0 + mulu.l d0,d1:d0 + move.l d0,(a0)+ + move.l d1,(a0)+ + + subq.l #1,d2 + jbeq 3f + + move.l (a1)+,d0 + mulu.l d0,d1:d0 + move.l d0,(a0)+ + move.l d1,(a0)+ + + subq.l #1,d2 + jbeq 3f + + move.l (a1)+,d0 + mulu.l d0,d1:d0 + move.l d0,(a0)+ + move.l d1,(a0)+ +3: + move.l (sp)+,d2 + rts + + .even +.globl _bn_mul_comba8 +_bn_mul_comba8: + movm.l #0x3c20,-(sp) + movm.l 24(sp),#0x0700 + clr.l d2 + move.l d2,d3 + move.l d2,d4 + move.l d2,d5 + move.l (a1),d0 + move.l (a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d2 + addx.l d1,d3 + addx.l d5,d4 + + move.l d2,(a0) + move.l d5,d2 + move.l (a1),d0 + move.l 4(a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d3 + addx.l d1,d4 + addx.l d5,d2 + + move.l 4(a1),d0 + move.l (a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d3 + addx.l d1,d4 + addx.l d5,d2 + + move.l d3,4(a0) + move.l d5,d3 + move.l 8(a1),d0 + move.l (a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d4 + addx.l d1,d2 + addx.l d5,d3 + + move.l 4(a1),d0 + move.l 4(a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d4 + addx.l d1,d2 + addx.l d5,d3 + + move.l (a1),d0 + move.l 8(a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d4 + addx.l d1,d2 + addx.l d5,d3 + + move.l d4,8(a0) + move.l d5,d4 + move.l (a1),d0 + move.l 12(a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d2 + addx.l d1,d3 + addx.l d5,d4 + + move.l 4(a1),d0 + move.l 8(a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d2 + addx.l d1,d3 + addx.l d5,d4 + + move.l 8(a1),d0 + move.l 4(a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d2 + addx.l d1,d3 + addx.l d5,d4 + + move.l 12(a1),d0 + move.l (a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d2 + addx.l d1,d3 + addx.l d5,d4 + + move.l d2,12(a0) + move.l d5,d2 + move.l 16(a1),d0 + move.l (a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d3 + addx.l d1,d4 + addx.l d5,d2 + + move.l 12(a1),d0 + move.l 4(a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d3 + addx.l d1,d4 + addx.l d5,d2 + + move.l 8(a1),d0 + move.l 8(a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d3 + addx.l d1,d4 + addx.l d5,d2 + + move.l 4(a1),d0 + move.l 12(a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d3 + addx.l d1,d4 + addx.l d5,d2 + + move.l (a1),d0 + move.l 16(a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d3 + addx.l d1,d4 + addx.l d5,d2 + + move.l d3,16(a0) + move.l d5,d3 + move.l (a1),d0 + move.l 20(a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d4 + addx.l d1,d2 + addx.l d5,d3 + + move.l 4(a1),d0 + move.l 16(a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d4 + addx.l d1,d2 + addx.l d5,d3 + + move.l 8(a1),d0 + move.l 12(a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d4 + addx.l d1,d2 + addx.l d5,d3 + + move.l 12(a1),d0 + move.l 8(a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d4 + addx.l d1,d2 + addx.l d5,d3 + + move.l 16(a1),d0 + move.l 4(a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d4 + addx.l d1,d2 + addx.l d5,d3 + + move.l 20(a1),d0 + move.l (a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d4 + addx.l d1,d2 + addx.l d5,d3 + + move.l d4,20(a0) + move.l d5,d4 + move.l 24(a1),d0 + move.l (a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d2 + addx.l d1,d3 + addx.l d5,d4 + + move.l 20(a1),d0 + move.l 4(a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d2 + addx.l d1,d3 + addx.l d5,d4 + + move.l 16(a1),d0 + move.l 8(a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d2 + addx.l d1,d3 + addx.l d5,d4 + + move.l 12(a1),d0 + move.l 12(a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d2 + addx.l d1,d3 + addx.l d5,d4 + + move.l 8(a1),d0 + move.l 16(a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d2 + addx.l d1,d3 + addx.l d5,d4 + + move.l 4(a1),d0 + move.l 20(a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d2 + addx.l d1,d3 + addx.l d5,d4 + + move.l (a1),d0 + move.l 24(a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d2 + addx.l d1,d3 + addx.l d5,d4 + + move.l d2,24(a0) + move.l d5,d2 + move.l (a1),d0 + move.l 28(a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d3 + addx.l d1,d4 + addx.l d5,d2 + + move.l 4(a1),d0 + move.l 24(a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d3 + addx.l d1,d4 + addx.l d5,d2 + + move.l 8(a1),d0 + move.l 20(a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d3 + addx.l d1,d4 + addx.l d5,d2 + + move.l 12(a1),d0 + move.l 16(a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d3 + addx.l d1,d4 + addx.l d5,d2 + + move.l 16(a1),d0 + move.l 12(a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d3 + addx.l d1,d4 + addx.l d5,d2 + + move.l 20(a1),d0 + move.l 8(a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d3 + addx.l d1,d4 + addx.l d5,d2 + + move.l 24(a1),d0 + move.l 4(a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d3 + addx.l d1,d4 + addx.l d5,d2 + + move.l 28(a1),d0 + move.l (a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d3 + addx.l d1,d4 + addx.l d5,d2 + + move.l d3,28(a0) + move.l d5,d3 + move.l 28(a1),d0 + move.l 4(a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d4 + addx.l d1,d2 + addx.l d5,d3 + + move.l 24(a1),d0 + move.l 8(a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d4 + addx.l d1,d2 + addx.l d5,d3 + + move.l 20(a1),d0 + move.l 12(a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d4 + addx.l d1,d2 + addx.l d5,d3 + + move.l 16(a1),d0 + move.l 16(a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d4 + addx.l d1,d2 + addx.l d5,d3 + + move.l 12(a1),d0 + move.l 20(a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d4 + addx.l d1,d2 + addx.l d5,d3 + + move.l 8(a1),d0 + move.l 24(a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d4 + addx.l d1,d2 + addx.l d5,d3 + + move.l 4(a1),d0 + move.l 28(a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d4 + addx.l d1,d2 + addx.l d5,d3 + + move.l d4,32(a0) + move.l d5,d4 + move.l 8(a1),d0 + move.l 28(a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d2 + addx.l d1,d3 + addx.l d5,d4 + + move.l 12(a1),d0 + move.l 24(a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d2 + addx.l d1,d3 + addx.l d5,d4 + + move.l 16(a1),d0 + move.l 20(a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d2 + addx.l d1,d3 + addx.l d5,d4 + + move.l 20(a1),d0 + move.l 16(a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d2 + addx.l d1,d3 + addx.l d5,d4 + + move.l 24(a1),d0 + move.l 12(a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d2 + addx.l d1,d3 + addx.l d5,d4 + + move.l 28(a1),d0 + move.l 8(a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d2 + addx.l d1,d3 + addx.l d5,d4 + + move.l d2,36(a0) + move.l d5,d2 + move.l 28(a1),d0 + move.l 12(a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d3 + addx.l d1,d4 + addx.l d5,d2 + + move.l 24(a1),d0 + move.l 16(a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d3 + addx.l d1,d4 + addx.l d5,d2 + + move.l 20(a1),d0 + move.l 20(a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d3 + addx.l d1,d4 + addx.l d5,d2 + + move.l 16(a1),d0 + move.l 24(a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d3 + addx.l d1,d4 + addx.l d5,d2 + + move.l 12(a1),d0 + move.l 28(a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d3 + addx.l d1,d4 + addx.l d5,d2 + + move.l d3,40(a0) + move.l d5,d3 + move.l 16(a1),d0 + move.l 28(a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d4 + addx.l d1,d2 + addx.l d5,d3 + + move.l 20(a1),d0 + move.l 24(a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d4 + addx.l d1,d2 + addx.l d5,d3 + + move.l 24(a1),d0 + move.l 20(a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d4 + addx.l d1,d2 + addx.l d5,d3 + + move.l 28(a1),d0 + move.l 16(a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d4 + addx.l d1,d2 + addx.l d5,d3 + + move.l d4,44(a0) + move.l d5,d4 + move.l 28(a1),d0 + move.l 20(a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d2 + addx.l d1,d3 + addx.l d5,d4 + + move.l 24(a1),d0 + move.l 24(a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d2 + addx.l d1,d3 + addx.l d5,d4 + + move.l 20(a1),d0 + move.l 28(a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d2 + addx.l d1,d3 + addx.l d5,d4 + + move.l d2,48(a0) + move.l d5,d2 + move.l 24(a1),d0 + move.l 28(a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d3 + addx.l d1,d4 + addx.l d5,d2 + + move.l 28(a1),d0 + move.l 24(a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d3 + addx.l d1,d4 + addx.l d5,d2 + + move.l d3,52(a0) + move.l d5,d3 + move.l 28(a1),d0 + move.l 28(a2),d1 + + mulu.l d1,d1:d0 + add.l d0,d4 + addx.l d1,d2 + addx.l d5,d3 + + move.l d4,56(a0) + move.l d2,60(a0) + + movm.l (sp)+,#0x043c + rts + + .even +.globl _bn_sqr_comba8 +_bn_sqr_comba8: + movm.l #0x3e00,-(sp) + move.l 24(sp),a1 + move.l 28(sp),a0 + clr.l d5 + move.l (a0),d1 + move.l d5,d3 + move.l d5,d4 + move.l d5,d6 + + mulu.l d1,d0:d1 + add.l d1,d5 + addx.l d0,d3 + addx.l d6,d4 + + move.l d5,(a1) + move.l d6,d5 + move.l 4(a0),d2 + move.l (a0),d1 + + mulu.l d2,d2:d1 + add.l d1,d3 + addx.l d2,d4 + addx.l d6,d5 + add.l d1,d3 + addx.l d2,d4 + addx.l d6,d5 + + move.l d3,4(a1) + move.l d6,d3 + move.l 4(a0),d1 + + mulu.l d1,d0:d1 + add.l d1,d4 + addx.l d0,d5 + addx.l d6,d3 + + move.l 8(a0),d2 + move.l (a0),d1 + + mulu.l d2,d2:d1 + add.l d1,d4 + addx.l d2,d5 + addx.l d6,d3 + add.l d1,d4 + addx.l d2,d5 + addx.l d6,d3 + + move.l d4,8(a1) + move.l d6,d4 + move.l 12(a0),d2 + move.l (a0),d1 + + mulu.l d2,d2:d1 + add.l d1,d5 + addx.l d2,d3 + addx.l d6,d4 + add.l d1,d5 + addx.l d2,d3 + addx.l d6,d4 + + move.l 8(a0),d2 + move.l 4(a0),d1 + + mulu.l d2,d2:d1 + add.l d1,d5 + addx.l d2,d3 + addx.l d6,d4 + add.l d1,d5 + addx.l d2,d3 + addx.l d6,d4 + + move.l d5,12(a1) + move.l d6,d5 + move.l 8(a0),d1 + + mulu.l d1,d0:d1 + add.l d1,d3 + addx.l d0,d4 + addx.l d6,d5 + + move.l 12(a0),d2 + move.l 4(a0),d1 + + mulu.l d2,d2:d1 + add.l d1,d3 + addx.l d2,d4 + addx.l d6,d5 + add.l d1,d3 + addx.l d2,d4 + addx.l d6,d5 + + move.l 16(a0),d2 + move.l (a0),d1 + + mulu.l d2,d2:d1 + add.l d1,d3 + addx.l d2,d4 + addx.l d6,d5 + add.l d1,d3 + addx.l d2,d4 + addx.l d6,d5 + + move.l d3,16(a1) + move.l d6,d3 + move.l 20(a0),d2 + move.l (a0),d1 + + mulu.l d2,d2:d1 + add.l d1,d4 + addx.l d2,d5 + addx.l d6,d3 + add.l d1,d4 + addx.l d2,d5 + addx.l d6,d3 + + move.l 16(a0),d2 + move.l 4(a0),d1 + + mulu.l d2,d2:d1 + add.l d1,d4 + addx.l d2,d5 + addx.l d6,d3 + add.l d1,d4 + addx.l d2,d5 + addx.l d6,d3 + + move.l 12(a0),d2 + move.l 8(a0),d1 + + mulu.l d2,d2:d1 + add.l d1,d4 + addx.l d2,d5 + addx.l d6,d3 + add.l d1,d4 + addx.l d2,d5 + addx.l d6,d3 + + move.l d4,20(a1) + move.l d6,d4 + move.l 12(a0),d1 + + mulu.l d1,d0:d1 + add.l d1,d5 + addx.l d0,d3 + addx.l d6,d4 + + move.l 16(a0),d2 + move.l 8(a0),d1 + + mulu.l d2,d2:d1 + add.l d1,d5 + addx.l d2,d3 + addx.l d6,d4 + add.l d1,d5 + addx.l d2,d3 + addx.l d6,d4 + + move.l 20(a0),d2 + move.l 4(a0),d1 + + mulu.l d2,d2:d1 + add.l d1,d5 + addx.l d2,d3 + addx.l d6,d4 + add.l d1,d5 + addx.l d2,d3 + addx.l d6,d4 + + move.l 24(a0),d2 + move.l (a0),d1 + + mulu.l d2,d2:d1 + add.l d1,d5 + addx.l d2,d3 + addx.l d6,d4 + add.l d1,d5 + addx.l d2,d3 + addx.l d6,d4 + + move.l d5,24(a1) + move.l d6,d5 + move.l 28(a0),d2 + move.l (a0),d1 + + mulu.l d2,d2:d1 + add.l d1,d3 + addx.l d2,d4 + addx.l d6,d5 + add.l d1,d3 + addx.l d2,d4 + addx.l d6,d5 + + move.l 24(a0),d2 + move.l 4(a0),d1 + + mulu.l d2,d2:d1 + add.l d1,d3 + addx.l d2,d4 + addx.l d6,d5 + add.l d1,d3 + addx.l d2,d4 + addx.l d6,d5 + + move.l 20(a0),d2 + move.l 8(a0),d1 + + mulu.l d2,d2:d1 + add.l d1,d3 + addx.l d2,d4 + addx.l d6,d5 + add.l d1,d3 + addx.l d2,d4 + addx.l d6,d5 + + move.l 16(a0),d2 + move.l 12(a0),d1 + + mulu.l d2,d2:d1 + add.l d1,d3 + addx.l d2,d4 + addx.l d6,d5 + add.l d1,d3 + addx.l d2,d4 + addx.l d6,d5 + + move.l d3,28(a1) + move.l d6,d3 + move.l 16(a0),d1 + + mulu.l d1,d0:d1 + add.l d1,d4 + addx.l d0,d5 + addx.l d6,d3 + + move.l 20(a0),d2 + move.l 12(a0),d1 + + mulu.l d2,d2:d1 + add.l d1,d4 + addx.l d2,d5 + addx.l d6,d3 + add.l d1,d4 + addx.l d2,d5 + addx.l d6,d3 + + move.l 24(a0),d2 + move.l 8(a0),d1 + + mulu.l d2,d2:d1 + add.l d1,d4 + addx.l d2,d5 + addx.l d6,d3 + add.l d1,d4 + addx.l d2,d5 + addx.l d6,d3 + + move.l 28(a0),d2 + move.l 4(a0),d1 + + mulu.l d2,d2:d1 + add.l d1,d4 + addx.l d2,d5 + addx.l d6,d3 + add.l d1,d4 + addx.l d2,d5 + addx.l d6,d3 + + move.l d4,32(a1) + move.l d6,d4 + move.l 28(a0),d2 + move.l 8(a0),d1 + + mulu.l d2,d2:d1 + add.l d1,d5 + addx.l d2,d3 + addx.l d6,d4 + add.l d1,d5 + addx.l d2,d3 + addx.l d6,d4 + + move.l 24(a0),d2 + move.l 12(a0),d1 + + mulu.l d2,d2:d1 + add.l d1,d5 + addx.l d2,d3 + addx.l d6,d4 + add.l d1,d5 + addx.l d2,d3 + addx.l d6,d4 + + move.l 20(a0),d2 + move.l 16(a0),d1 + + mulu.l d2,d2:d1 + add.l d1,d5 + addx.l d2,d3 + addx.l d6,d4 + add.l d1,d5 + addx.l d2,d3 + addx.l d6,d4 + + move.l d5,36(a1) + move.l d6,d5 + move.l 20(a0),d1 + + mulu.l d1,d0:d1 + add.l d1,d3 + addx.l d0,d4 + addx.l d6,d5 + + move.l 24(a0),d2 + move.l 16(a0),d1 + + mulu.l d2,d2:d1 + add.l d1,d3 + addx.l d2,d4 + addx.l d6,d5 + add.l d1,d3 + addx.l d2,d4 + addx.l d6,d5 + + move.l 28(a0),d2 + move.l 12(a0),d1 + + mulu.l d2,d2:d1 + add.l d1,d3 + addx.l d2,d4 + addx.l d6,d5 + add.l d1,d3 + addx.l d2,d4 + addx.l d6,d5 + + move.l d3,40(a1) + move.l d6,d3 + move.l 28(a0),d2 + move.l 16(a0),d1 + + mulu.l d2,d2:d1 + add.l d1,d4 + addx.l d2,d5 + addx.l d6,d3 + add.l d1,d4 + addx.l d2,d5 + addx.l d6,d3 + + move.l 24(a0),d2 + move.l 20(a0),d1 + + mulu.l d2,d2:d1 + add.l d1,d4 + addx.l d2,d5 + addx.l d6,d3 + add.l d1,d4 + addx.l d2,d5 + addx.l d6,d3 + + move.l d4,44(a1) + move.l d6,d4 + move.l 24(a0),d1 + + mulu.l d1,d0:d1 + add.l d1,d5 + addx.l d0,d3 + addx.l d6,d4 + + move.l 28(a0),d2 + move.l 20(a0),d1 + + mulu.l d2,d2:d1 + add.l d1,d5 + addx.l d2,d3 + addx.l d6,d4 + add.l d1,d5 + addx.l d2,d3 + addx.l d6,d4 + + move.l d5,48(a1) + move.l d6,d5 + move.l 28(a0),d2 + move.l 24(a0),d1 + + mulu.l d2,d2:d1 + add.l d1,d3 + addx.l d2,d4 + addx.l d6,d5 + add.l d1,d3 + addx.l d2,d4 + addx.l d6,d5 + + move.l d3,52(a1) + move.l d6,d3 + move.l 28(a0),d1 + + mulu.l d1,d0:d1 + add.l d1,d4 + addx.l d0,d5 + addx.l d6,d3 + + move.l d4,56(a1) + move.l d5,60(a1) + movm.l (sp)+,#0x7c + rts + + .even +.globl _bn_sqr_comba4 +_bn_sqr_comba4: + movm.l #0x3e00,-(sp) + move.l 24(sp),a1 + move.l 28(sp),a0 + clr.l d5 + move.l (a0),d1 + move.l d5,d4 + move.l d5,d3 + move.l d5,d6 + + mulu.l d1,d0:d1 + add.l d1,d5 + addx.l d0,d4 + addx.l d6,d3 + + move.l d5,(a1) + move.l d6,d5 + move.l 4(a0),d2 + move.l (a0),d1 + + mulu.l d2,d2:d1 + add.l d1,d4 + addx.l d2,d3 + addx.l d6,d5 + add.l d1,d4 + addx.l d2,d3 + addx.l d6,d5 + + move.l d4,4(a1) + move.l d6,d4 + move.l 4(a0),d1 + + mulu.l d1,d0:d1 + add.l d1,d3 + addx.l d0,d5 + addx.l d6,d4 + + move.l 8(a0),d2 + move.l (a0),d1 + + mulu.l d2,d2:d1 + add.l d1,d3 + addx.l d2,d5 + addx.l d6,d4 + add.l d1,d3 + addx.l d2,d5 + addx.l d6,d4 + + move.l d3,8(a1) + move.l d6,d3 + move.l 12(a0),d2 + move.l (a0),d1 + + mulu.l d2,d2:d1 + add.l d1,d5 + addx.l d2,d4 + addx.l d6,d3 + add.l d1,d5 + addx.l d2,d4 + addx.l d6,d3 + + move.l 8(a0),d2 + move.l 4(a0),d1 + + mulu.l d2,d2:d1 + add.l d1,d5 + addx.l d2,d4 + addx.l d6,d3 + add.l d1,d5 + addx.l d2,d4 + addx.l d6,d3 + + move.l d5,12(a1) + move.l d6,d5 + move.l 8(a0),d1 + + mulu.l d1,d0:d1 + add.l d1,d4 + addx.l d0,d3 + addx.l d6,d5 + + move.l 12(a0),d2 + move.l 4(a0),d1 + + mulu.l d2,d2:d1 + add.l d1,d4 + addx.l d2,d3 + addx.l d6,d5 + add.l d1,d4 + addx.l d2,d3 + addx.l d6,d5 + + move.l d4,16(a1) + move.l d6,d4 + move.l 12(a0),d2 + move.l 8(a0),d1 + + mulu.l d2,d2:d1 + add.l d1,d3 + addx.l d2,d5 + addx.l d6,d4 + add.l d1,d3 + addx.l d2,d5 + addx.l d6,d4 + + move.l d3,20(a1) + move.l d6,d3 + move.l 12(a0),d1 + + mulu.l d1,d0:d1 + add.l d1,d5 + addx.l d0,d4 + addx.l d6,d3 + + move.l d5,24(a1) + move.l d4,28(a1) + movm.l (sp)+,#0x7c + rts + + .even +.globl _bn_mul_comba4 +_bn_mul_comba4: + movm.l #0x3c20,-(sp) + move.l 24(sp),a2 + move.l 28(sp),a0 + move.l 32(sp),a1 + clr.l d4 + move.l (a0),d1 + move.l (a1),d0 + move.l d4,d3 + move.l d4,d2 + move.l d4,d5 + + mulu.l d1,d0:d1 + add.l d1,d4 + addx.l d0,d3 + addx.l d5,d2 + + move.l d4,(a2) + move.l d5,d4 + move.l (a0),d1 + move.l 4(a1),d0 + + mulu.l d1,d0:d1 + add.l d1,d3 + addx.l d0,d2 + addx.l d5,d4 + + move.l 4(a0),d1 + move.l (a1),d0 + + mulu.l d1,d0:d1 + add.l d1,d3 + addx.l d0,d2 + addx.l d5,d4 + + move.l d3,4(a2) + move.l d5,d3 + move.l 8(a0),d1 + move.l (a1),d0 + + mulu.l d1,d0:d1 + add.l d1,d2 + addx.l d0,d4 + addx.l d5,d3 + + move.l 4(a0),d1 + move.l 4(a1),d0 + + mulu.l d1,d0:d1 + add.l d1,d2 + addx.l d0,d4 + addx.l d5,d3 + + move.l (a0),d1 + move.l 8(a1),d0 + + mulu.l d1,d0:d1 + add.l d1,d2 + addx.l d0,d4 + addx.l d5,d3 + + move.l d2,8(a2) + move.l d5,d2 + move.l (a0),d1 + move.l 12(a1),d0 + + mulu.l d1,d0:d1 + add.l d1,d4 + addx.l d0,d3 + addx.l d5,d2 + + move.l 4(a0),d1 + move.l 8(a1),d0 + + mulu.l d1,d0:d1 + add.l d1,d4 + addx.l d0,d3 + addx.l d5,d2 + + move.l 8(a0),d1 + move.l 4(a1),d0 + + mulu.l d1,d0:d1 + add.l d1,d4 + addx.l d0,d3 + addx.l d5,d2 + + move.l 12(a0),d1 + move.l (a1),d0 + + mulu.l d1,d0:d1 + add.l d1,d4 + addx.l d0,d3 + addx.l d5,d2 + + move.l d4,12(a2) + move.l d5,d4 + move.l 12(a0),d1 + move.l 4(a1),d0 + + mulu.l d1,d0:d1 + add.l d1,d3 + addx.l d0,d2 + addx.l d5,d4 + + move.l 8(a0),d1 + move.l 8(a1),d0 + + mulu.l d1,d0:d1 + add.l d1,d3 + addx.l d0,d2 + addx.l d5,d4 + + move.l 4(a0),d1 + move.l 12(a1),d0 + + mulu.l d1,d0:d1 + add.l d1,d3 + addx.l d0,d2 + addx.l d5,d4 + + move.l d3,16(a2) + move.l d5,d3 + move.l 8(a0),d1 + move.l 12(a1),d0 + + mulu.l d1,d0:d1 + add.l d1,d2 + addx.l d0,d4 + addx.l d5,d3 + + move.l 12(a0),d1 + move.l 8(a1),d0 + + mulu.l d1,d0:d1 + add.l d1,d2 + addx.l d0,d4 + addx.l d5,d3 + + move.l d2,20(a2) + move.l d5,d2 + move.l 12(a0),d1 + move.l 12(a1),d0 + + mulu.l d1,d0:d1 + add.l d1,d4 + addx.l d0,d3 + addx.l d5,d2 + + move.l d4,24(a2) + move.l d3,28(a2) + movm.l (sp)+,#0x43c + rts + +/* bn_div_words should really just be inlined wherever it's used */ + + .even +.globl _bn_div_words +_bn_div_words: + move.l 4(sp),d1 + move.l 8(sp),d0 + divu.l 12(sp),d1:d0 + rts + + .even +.globl _bn_add_words +_bn_add_words: + movm.l #0x2030,-(sp) + movm.l 16(sp),#0x0f00 + clr.l d0 + tst.l a3 + jble 3f + +/* d0 is 0, use this shift to clear the eXtend bit */ + lsl.l #1,d0 +1: + move.l (a1)+,d1 + move.l (a2)+,d2 + addx.l d1,d2 + move.l d2,(a0)+ + subq.l #1,a3 + tst.l a3 + jble 2f + + move.l (a1)+,d1 + move.l (a2)+,d2 + addx.l d1,d2 + move.l d2,(a0)+ + subq.l #1,a3 + tst.l a3 + jble 2f + + move.l (a1)+,d1 + move.l (a2)+,d2 + addx.l d1,d2 + move.l d2,(a0)+ + subq.l #1,a3 + tst.l a3 + jble 2f + + move.l (a1)+,d1 + move.l (a2)+,d2 + addx.l d1,d2 + move.l d2,(a0)+ + subq.l #1,a3 + tst.l a3 + jgt 1b +2: + addx.l d0,d0 +3: + movm.l (sp)+,#0x0c04 + rts + + .even +.globl _bn_sub_words +_bn_sub_words: + movm.l #0x2030,-(sp) + movm.l 16(sp),#0x0f00 + clr.l d0 + tst.l a3 + jble 3f + + lsl.l #1,d0 +1: + move.l (a1)+,d2 + move.l (a2)+,d1 + subx.l d1,d2 + move.l d2,(a0)+ + subq.l #1,a3 + tst.l a3 + jble 2f + + move.l (a1)+,d2 + move.l (a2)+,d1 + subx.l d1,d2 + move.l d2,(a0)+ + subq.l #1,a3 + tst.l a3 + jble 2f + + move.l (a1)+,d2 + move.l (a2)+,d1 + subx.l d1,d2 + move.l d2,(a0)+ + subq.l #1,a3 + tst.l a3 + jble 2f + + move.l (a1)+,d2 + move.l (a2)+,d1 + subx.l d1,d2 + move.l d2,(a0)+ + subq.l #1,a3 + tst.l a3 + jgt 1b +2: + addx.l d0,d0 +3: + movm.l (sp)+,#0x0c04 + rts diff --git a/sdk/recipes/files/openssl/m68k-unknown-amigaos/crypto/rand/rand_amiga.c b/sdk/recipes/files/openssl/m68k-unknown-amigaos/crypto/rand/rand_amiga.c new file mode 100644 index 0000000..3c18b7d --- /dev/null +++ b/sdk/recipes/files/openssl/m68k-unknown-amigaos/crypto/rand/rand_amiga.c @@ -0,0 +1,189 @@ +#include <openssl/rand.h> +#include <openssl/sha.h> +#include "rand_lcl.h" + +#if defined(OPENSSL_SYS_AMIGAOS3) || defined(OPENSSL_SYS_AMIGAOS4) +#define __USE_INLINE__ 1 + +#include <proto/exec.h> +#include <proto/timer.h> +#include <devices/timer.h> + +/* Maximum number of attempts to get a delay of 1 microsecond that is not equal to 0 */ +#define MAX_ATTEMPTS 1000 + +#ifdef __amigaos4__ + +#ifdef CreateMsgPort +#undef CreateMsgPort +#endif +#define CreateMsgPort() AllocSysObject(ASOT_PORT,NULL) +#ifdef DeleteMsgPort +#undef DeleteMsgPort +#endif +#define DeleteMsgPort(msgPort) FreeSysObject(ASOT_PORT,msgPort) +#ifdef CreateIORequest +#undef CreateIORequest +#endif +#define CreateIORequest(ioReplyPort,size) AllocSysObjectTags(ASOT_IOREQUEST,ASOIOR_ReplyPort,ioReplyPort,ASOIOR_Size,size,TAG_DONE) +#ifdef DeleteIORequest +#undef DeleteIORequest +#endif +#define DeleteIORequest(ioReq) FreeSysObject(ASOT_IOREQUEST,ioReq) + +#else + +#define GetInterface(a, b, c, d) 1 +#define DropInterface(x) + +/* OS3 has a different but compatible TimeVal definition */ +struct TimeVal +{ + ULONG Seconds; + ULONG Microseconds; +}; + +/* ...and ditto for TimeRequest */ +struct TimeRequest +{ + struct IORequest Request; + struct TimeVal Time; +}; + +#endif /* !__amigaos4__ */ + +int RAND_poll(void) +{ + unsigned char temp_buffer[SHA_DIGEST_LENGTH], data_buffer[SHA_DIGEST_LENGTH]; + struct MsgPort *port = NULL; + double entropy_added = 0; + struct TimeRequest *time_request = NULL; +#ifdef __amigaos4__ + struct IOStdReq *entropy_request = NULL; + + if ((port = CreateMsgPort()) + && (entropy_request = (struct IOStdReq *)CreateIORequest(port, sizeof(*entropy_request)))) + { + if (OpenDevice(TIMERNAME, UNIT_ENTROPY, (struct IORequest *)entropy_request, 0) == 0) + { + while(entropy_added < ENTROPY_NEEDED) + { + entropy_request->io_Command = TR_READENTROPY; + entropy_request->io_Data = &temp_buffer[0]; + entropy_request->io_Length = sizeof(temp_buffer); + + if (DoIO((struct IORequest *)entropy_request) == 0) + { + SHA1(&temp_buffer[0], sizeof(temp_buffer), &data_buffer[0]); + RAND_add(&data_buffer[0], sizeof(data_buffer), sizeof(data_buffer)); + entropy_added += sizeof(data_buffer); + } + else + break; + } + + CloseDevice((struct IORequest *)entropy_request); + } + } + + DeleteIORequest((struct IORequest *)entropy_request); +#endif /* __amigaos4__ */ + + /* The following block will be used on "classic" machines. It does not generate + * a high degree of randomness, but it does the job since RAND_poll is + * called only once by OpenSSL to generate a 32 byte seed. + */ + if (entropy_added < ENTROPY_NEEDED + && (port || (port = CreateMsgPort())) + && (time_request = (struct TimeRequest *)CreateIORequest(port, sizeof(*time_request)))) + { + if (OpenDevice(TIMERNAME, UNIT_VBLANK, (struct IORequest *)time_request, 0) == 0) + { + #if defined(__amigaos4__) + struct TimerIFace *ITimer = NULL; + #endif + struct Device *TimerBase; + + if ((TimerBase = time_request->Request.io_Device) + #if defined(__amigaos4__) + && (ITimer = (struct TimerIFace *)GetInterface((struct Library *)TimerBase, "main", 1, NULL)) + #endif + ) + { + struct EClockVal curr_eclock; + ULONG prev_ev_lo = 0; + struct TimeVal tv; + int i, attempt; + BOOL aborted; + + ReadEClock(&curr_eclock); + aborted = FALSE; + + while(!aborted && entropy_added < ENTROPY_NEEDED) + { + for(i = 0; + !aborted && i < (int)sizeof(temp_buffer) - (int)sizeof(ULONG); + i++) + { + attempt = 0; + + /* Ask for a one microsecond delay and measure the time + * the delay actually took. + */ + do + { + time_request->Request.io_Command = TR_ADDREQUEST; + time_request->Time.Seconds = 0; + time_request->Time.Microseconds = 1; + + if (DoIO((struct IORequest *)time_request) == 0) + { + prev_ev_lo = curr_eclock.ev_lo; + ReadEClock(&curr_eclock); + + attempt++; + } + else + aborted = TRUE; + } while(!aborted && prev_ev_lo == 0 && attempt < MAX_ATTEMPTS); + + if (attempt >= MAX_ATTEMPTS) + aborted = TRUE; + + /* Since we are going for randomness, ev_hi is irrelevant */ + temp_buffer[i] = (unsigned char)(curr_eclock.ev_lo - prev_ev_lo); + } + + GetSysTime(&tv); + + if (sizeof(temp_buffer) > sizeof(ULONG)) + *(ULONG *)&temp_buffer[sizeof(temp_buffer) - sizeof(ULONG)] + = tv.Microseconds; + + /* Shuffle the bits around and specify that about + * one fourth of it adds to the entropy. + */ + if (!aborted) + { + SHA1(&temp_buffer[0], sizeof(temp_buffer), &data_buffer[0]); + RAND_add(&data_buffer[0], sizeof(data_buffer), (double)sizeof(data_buffer) / 4); + entropy_added += sizeof(data_buffer) / 4; + } + } + } + + #if defined(__amigaos4__) + DropInterface((struct Interface *)ITimer); + #endif + CloseDevice((struct IORequest *)time_request); + } + } + + DeleteIORequest((struct IORequest *)time_request); + + DeleteMsgPort(port); + + return(entropy_added >= ENTROPY_NEEDED); +} + +#endif /* OPENSSL_SYS_AMIGA */ |