3 # ====================================================================
4 # Written by Andy Polyakov <appro@fy.chalmers.se> for the OpenSSL
5 # project. The module is, however, dual licensed under OpenSSL and
6 # CRYPTOGAMS licenses depending on where you obtain it. For further
7 # details see http://www.openssl.org/~appro/cryptogams/.
8 # ====================================================================
10 # This module doesn't present direct interest for OpenSSL, because it
11 # doesn't provide better performance for longer keys. While 512-bit
12 # RSA private key operations are 40% faster, 1024-bit ones are hardly
13 # faster at all, while longer key operations are slower by up to 20%.
14 # It might be of interest to embedded system developers though, as
15 # it's smaller than 1KB, yet offers ~3x improvement over compiler
18 # The module targets N32 and N64 MIPS ABIs and currently is a bit
19 # IRIX-centric, i.e. is likely to require adaptation for other OSes.
22 $rp="a0"; # BN_ULONG *rp,
23 $ap="a1"; # const BN_ULONG *ap,
24 $bp="a2"; # const BN_ULONG *bp,
25 $np="a3"; # const BN_ULONG *np,
26 $n0="a4"; # const BN_ULONG *n0,
27 $num="a5"; # int num);
79 PTR_SUB sp,16 # place for two extra words
270 PTR_ADD $tj,sp,$num # &tp[num]
273 li $hi0,0 # clear borrow bit
280 dsubu $lo1,$lo0,$lo1 # tp[i]-np[i]
290 dsubu $hi0,$hi1,$hi0 # handle upmost overflow bit
292 PTR_SUB $rp,$num # restore rp
297 or $ap,$ap,$bp # ap=borrow?tp:rp
323 .asciiz "Montgomery Multiplication for MIPS III/IV, CRYPTOGAMS by <appro\@openssl.org>"