summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Young <chris@unsatisfactorysoftware.co.uk>2017-02-13 23:54:42 (GMT)
committer Chris Young <chris@unsatisfactorysoftware.co.uk>2017-02-13 23:54:42 (GMT)
commit1ab0f15987f1fe6687eb7e03a521ec5cffae5a48 (patch)
treef4ba6b93e24544ec762b72e0645fcc48d43c14d5
parentc71bb2fb9237de8dbba5f2b8bb6ffe56010310f5 (diff)
downloadtoolchains-1ab0f15987f1fe6687eb7e03a521ec5cffae5a48.tar.gz
toolchains-1ab0f15987f1fe6687eb7e03a521ec5cffae5a48.tar.bz2
Apply the m68k optimisations also to the m68k Atari build (untested)chris/openssl-68k
This build of OpenSSL will now require at least a 68020. It is my understanding that our CI builds a 68020-60 version of NetSurf so this should not be an issue. These patches were originally written for FreeMiNT so have been previously tested on that platform.
-rw-r--r--sdk/Makefile1
-rw-r--r--sdk/recipes/files/openssl/m68k-atari-mint/crypto/bn/asm/bn_m68k.s1604
-rw-r--r--sdk/recipes/patches/openssl/Configure.p2
-rw-r--r--sdk/recipes/patches/openssl/m68k-atari-mint/crypto.bn.Makefile.p12
-rw-r--r--sdk/recipes/patches/openssl/m68k-atari-mint/crypto.bn.bn_div.c.p25
5 files changed, 1642 insertions, 2 deletions
diff --git a/sdk/Makefile b/sdk/Makefile
index 8850224..f94ec3d 100644
--- a/sdk/Makefile
+++ b/sdk/Makefile
@@ -99,7 +99,6 @@ ifeq ($(TARGET),m68k-atari-mint)
EXTRAARGS_LIBCURL := --enable-optimize --enable-nonblocking --enable-ares --with-random="/dev/urandom" --disable-manual --disable-curldebug --disable-thread --disable-threaded-resolver
EXTRAARGS_LIBICONV := --enable-extra-encodings
LIBICONV_ENV := CFLAGS="-DPATH_MAX=1024"
- EXTRAARGS_OPENSSL := no-asm
endif
ifeq ($(TARGET),m5475-atari-mint)
diff --git a/sdk/recipes/files/openssl/m68k-atari-mint/crypto/bn/asm/bn_m68k.s b/sdk/recipes/files/openssl/m68k-atari-mint/crypto/bn/asm/bn_m68k.s
new file mode 100644
index 0000000..effdc6a
--- a/dev/null
+++ b/sdk/recipes/files/openssl/m68k-atari-mint/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/patches/openssl/Configure.p b/sdk/recipes/patches/openssl/Configure.p
index c54b734..3347adf 100644
--- a/sdk/recipes/patches/openssl/Configure.p
+++ b/sdk/recipes/patches/openssl/Configure.p
@@ -5,7 +5,7 @@
"beos-x86-bone", "gcc:-DL_ENDIAN -DTERMIOS -O3 -fomit-frame-pointer -mcpu=pentium -Wall::-D_REENTRANT:BEOS:-lbe -lbind -lsocket:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:beos:beos-shared:-fPIC:-shared:.so",
+"arm-unknown-riscos","arm-unknown-riscos-gcc:-DL_ENDIAN -DTERMIOS -DNO_SYS_UN_H -O3 -fomit-frame-pointer -Wall::-D_REENTRANT:::BN_LLONG DES_RISC1::::::::::::::::::::echo",
-+"m68k-atari-mint","m68k-atari-mint-gcc:-DB_ENDIAN -DTERMIOS -DNO_SYSLOG -DNO_SYS_UN_H -DOPENSSL_USE_IPV6=0 -O3 -fomit-frame-pointer -Wall::-D_REENTRANT:::BN_LLONG DES_RISC1::::::::::::::::::::m68k-atari-mint-ranlib",
++"m68k-atari-mint","m68k-atari-mint-gcc:-DB_ENDIAN -DTERMIOS -DNO_SYSLOG -DNO_SYS_UN_H -DOPENSSL_USE_IPV6=0 -m68020 -O3 -fomit-frame-pointer -Wall::-D_REENTRANT:::BN_LLONG::bn_m68k.o::::::::::::::::::m68k-atari-mint-ranlib",
+"m5475-atari-mint","m5475-atari-mint-gcc:-DB_ENDIAN -DTERMIOS -DNO_SYSLOG -DNO_SYS_UN_H -DOPENSSL_USE_IPV6=0 -O3 -fomit-frame-pointer -Wall::-D_REENTRANT:::BN_LLONG DES_RISC1::::::::::::::::::::m5475-atari-mint-ranlib",
+"m68k-unknown-amigaos","m68k-unknown-amigaos-gcc:-DB_ENDIAN -DOPENSSL_SYS_AMIGAOS3 -DNO_SYSLOG -DHAVE_FORK=0 -DNO_SYS_PARAM_H -DNO_SYS_UN_H -m68020 -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-lnet -lm:BN_LLONG::bn_m68k.o::::::::::::::::::m68k-unknown-amigaos-ranlib",
+"ppc-amigaos","ppc-amigaos-gcc:-DB_ENDIAN -DOPENSSL_SYS_AMIGAOS4 -DNO_SYSLOG -DHAVE_FORK=0 -DNO_SYS_PARAM_H -DNO_SYS_UN_H -O3 -fomit-frame-pointer -Wall::-D_REENTRANT:::BN_LLONG RC4_CHAR RC4_CHUNK:${ppc32_asm}:linux32::::::ppc-amigaos-ranlib",
diff --git a/sdk/recipes/patches/openssl/m68k-atari-mint/crypto.bn.Makefile.p b/sdk/recipes/patches/openssl/m68k-atari-mint/crypto.bn.Makefile.p
new file mode 100644
index 0000000..8d3bfc6
--- a/dev/null
+++ b/sdk/recipes/patches/openssl/m68k-atari-mint/crypto.bn.Makefile.p
@@ -0,0 +1,12 @@
+--- crypto/bn/Makefile 2017-01-26 13:22:03.000000000 +0000
++++ crypto/bn/Makefile 2017-02-11 15:24:31.133017711 +0000
+@@ -60,6 +60,9 @@ lib: $(LIBOBJ)
+ $(RANLIB) $(LIB) || echo Never mind.
+ @touch lib
+
++bn_m68k.o: asm/bn_m68k.s
++ $(CC) $(CFLAGS) -c -o $@ asm/bn_m68k.s
++
+ bn-586.s: asm/bn-586.pl ../perlasm/x86asm.pl
+ $(PERL) asm/bn-586.pl $(PERLASM_SCHEME) $(CFLAGS) $(PROCESSOR) > $@
+ co-586.s: asm/co-586.pl ../perlasm/x86asm.pl
diff --git a/sdk/recipes/patches/openssl/m68k-atari-mint/crypto.bn.bn_div.c.p b/sdk/recipes/patches/openssl/m68k-atari-mint/crypto.bn.bn_div.c.p
new file mode 100644
index 0000000..0d5492f
--- a/dev/null
+++ b/sdk/recipes/patches/openssl/m68k-atari-mint/crypto.bn.bn_div.c.p
@@ -0,0 +1,25 @@
+--- crypto/bn/bn_div.c 2017-01-26 13:22:03.000000000 +0000
++++ crypto/bn/bn_div.c 2017-02-11 16:06:29.437010335 +0000
+@@ -175,6 +175,22 @@ int BN_div(BIGNUM *dv, BIGNUM *rem, cons
+ q; \
+ })
+ # define REMAINDER_IS_ALREADY_CALCULATED
++# elif defined(__mc68020__)
++ /* Same rationale as for i386. On the 68020-60/CPU32 the divu
++ * instruction will take a 64 bit dividend in a register pair
++ * and overwrite that pair with the remainder:quotient.
++ * Howard Chu
++ */
++# undef bn_div_words
++# define bn_div_words(n0,n1,d0) \
++ ({ asm volatile ( \
++ "divu.l %4,%2:%3" \
++ : "=d"(rem), "=d"(q) \
++ : "0"(n0), "1"(n1), "d"(d0) \
++ : "cc"); \
++ q; \
++ })
++# define REMAINDER_IS_ALREADY_CALCULATED
+ # endif /* __<cpu> */
+ # endif /* __GNUC__ */
+ # endif /* OPENSSL_NO_ASM */