+++ /dev/null
-/* This assember is for R4000 and above machines. It takes advantage
- * of the 64 bit registers present on these CPUs.
- * Make sure that the SSLeay bignum library is compiled with
- * SIXTY_FOUR_BIT set and BN_LLONG undefined.
- * This must either be compiled with the system CC, or, if you use GNU gas,
- * cc -E mips3.s|gas -o mips3.o
- */
- .set reorder
- .set noat
-
-#define R1 $1
-#define CC $2
-#define R2 $3
-#define R3 $8
-#define R4 $9
-#define L1 $10
-#define L2 $11
-#define L3 $12
-#define L4 $13
-#define H1 $14
-#define H2 $15
-#define H3 $24
-#define H4 $25
-
-#define P1 $4
-#define P2 $5
-#define P3 $6
-#define P4 $7
-
- .align 2
- .ent bn_mul_add_words
- .globl bn_mul_add_words
-.text
-bn_mul_add_words:
- .frame $sp,0,$31
- .mask 0x00000000,0
- .fmask 0x00000000,0
-
- #blt P3,4,$lab34
-
- subu R1,P3,4
- move CC,$0
- bltz R1,$lab34
-$lab2:
- ld R1,0(P1)
- ld L1,0(P2)
- ld R2,8(P1)
- ld L2,8(P2)
- ld R3,16(P1)
- ld L3,16(P2)
- ld R4,24(P1)
- ld L4,24(P2)
- dmultu L1,P4
- daddu R1,R1,CC
- mflo L1
- sltu CC,R1,CC
- daddu R1,R1,L1
- mfhi H1
- sltu L1,R1,L1
- sd R1,0(P1)
- daddu CC,CC,L1
- dmultu L2,P4
- daddu CC,H1,CC
- mflo L2
- daddu R2,R2,CC
- sltu CC,R2,CC
- mfhi H2
- daddu R2,R2,L2
- daddu P2,P2,32
- sltu L2,R2,L2
- sd R2,8(P1)
- daddu CC,CC,L2
- dmultu L3,P4
- daddu CC,H2,CC
- mflo L3
- daddu R3,R3,CC
- sltu CC,R3,CC
- mfhi H3
- daddu R3,R3,L3
- daddu P1,P1,32
- sltu L3,R3,L3
- sd R3,-16(P1)
- daddu CC,CC,L3
- dmultu L4,P4
- daddu CC,H3,CC
- mflo L4
- daddu R4,R4,CC
- sltu CC,R4,CC
- mfhi H4
- daddu R4,R4,L4
- subu P3,P3,4
- sltu L4,R4,L4
- daddu CC,CC,L4
- daddu CC,H4,CC
-
- subu R1,P3,4
- sd R4,-8(P1) # delay slot
- bgez R1,$lab2
-
- bleu P3,0,$lab3
- .align 2
-$lab33:
- ld L1,0(P2)
- ld R1,0(P1)
- dmultu L1,P4
- daddu R1,R1,CC
- sltu CC,R1,CC
- daddu P1,P1,8
- mflo L1
- mfhi H1
- daddu R1,R1,L1
- daddu P2,P2,8
- sltu L1,R1,L1
- subu P3,P3,1
- daddu CC,CC,L1
- sd R1,-8(P1)
- daddu CC,H1,CC
- bgtz P3,$lab33
- j $31
- .align 2
-$lab3:
- j $31
- .align 2
-$lab34:
- bgt P3,0,$lab33
- j $31
- .end bn_mul_add_words
-
- .align 2
- # Program Unit: bn_mul_words
- .ent bn_mul_words
- .globl bn_mul_words
-.text
-bn_mul_words:
- .frame $sp,0,$31
- .mask 0x00000000,0
- .fmask 0x00000000,0
-
- subu P3,P3,4
- move CC,$0
- bltz P3,$lab45
-$lab44:
- ld L1,0(P2)
- ld L2,8(P2)
- ld L3,16(P2)
- ld L4,24(P2)
- dmultu L1,P4
- subu P3,P3,4
- mflo L1
- mfhi H1
- daddu L1,L1,CC
- dmultu L2,P4
- sltu CC,L1,CC
- sd L1,0(P1)
- daddu CC,H1,CC
- mflo L2
- mfhi H2
- daddu L2,L2,CC
- dmultu L3,P4
- sltu CC,L2,CC
- sd L2,8(P1)
- daddu CC,H2,CC
- mflo L3
- mfhi H3
- daddu L3,L3,CC
- dmultu L4,P4
- sltu CC,L3,CC
- sd L3,16(P1)
- daddu CC,H3,CC
- mflo L4
- mfhi H4
- daddu L4,L4,CC
- daddu P1,P1,32
- sltu CC,L4,CC
- daddu P2,P2,32
- daddu CC,H4,CC
- sd L4,-8(P1)
-
- bgez P3,$lab44
- b $lab45
-$lab46:
- ld L1,0(P2)
- daddu P1,P1,8
- dmultu L1,P4
- daddu P2,P2,8
- mflo L1
- mfhi H1
- daddu L1,L1,CC
- subu P3,P3,1
- sltu CC,L1,CC
- sd L1,-8(P1)
- daddu CC,H1,CC
- bgtz P3,$lab46
- j $31
-$lab45:
- addu P3,P3,4
- bgtz P3,$lab46
- j $31
- .align 2
- .end bn_mul_words
-
- # Program Unit: bn_sqr_words
- .ent bn_sqr_words
- .globl bn_sqr_words
-.text
-bn_sqr_words:
- .frame $sp,0,$31
- .mask 0x00000000,0
- .fmask 0x00000000,0
-
- subu P3,P3,4
- b $lab55
- bltz P3,$lab55
-$lab54:
- ld L1,0(P2)
- ld L2,8(P2)
- ld L3,16(P2)
- ld L4,24(P2)
-
- dmultu L1,L1
- subu P3,P3,4
- mflo L1
- mfhi H1
- sd L1,0(P1)
- sd H1,8(P1)
-
- dmultu L2,L2
- daddu P1,P1,32
- mflo L2
- mfhi H2
- sd L2,-48(P1)
- sd H2,-40(P1)
-
- dmultu L3,L3
- daddu P2,P2,32
- mflo L3
- mfhi H3
- sd L3,-32(P1)
- sd H3,-24(P1)
-
- dmultu L4,L4
-
- mflo L4
- mfhi H4
- sd L4,-16(P1)
- sd H4,-8(P1)
-
- bgtz P3,$lab54
- b $lab55
-$lab56:
- ld L1,0(P2)
- daddu P1,P1,16
- dmultu L1,L1
- daddu P2,P2,8
- subu P3,P3,1
- mflo L1
- mfhi H1
- sd L1,-16(P1)
- sd H1,-8(P1)
-
- bgtz P3,$lab56
- j $31
-$lab55:
- daddu P3,P3,4
- bgtz P3,$lab56
- j $31
- .align 2
- .end bn_sqr_words
-
- # Program Unit: bn_add_words
- .ent bn_add_words
- .globl bn_add_words
-.text
-bn_add_words: # 0x590
- .frame $sp,0,$31
- .mask 0x00000000,0
- .fmask 0x00000000,0
-
- subu P4,P4,4
- move CC,$0
- bltz P4,$lab65
-$lab64:
- ld L1,0(P2)
- ld R1,0(P3)
- ld L2,8(P2)
- ld R2,8(P3)
-
- daddu L1,L1,CC
- ld L3,16(P2)
- sltu CC,L1,CC
- daddu L1,L1,R1
- sltu R1,L1,R1
- ld R3,16(P3)
- daddu CC,CC,R1
- ld L4,24(P2)
-
- daddu L2,L2,CC
- ld R4,24(P3)
- sltu CC,L2,CC
- daddu L2,L2,R2
- sltu R2,L2,R2
- sd L1,0(P1)
- daddu CC,CC,R2
- daddu P1,P1,32
- daddu L3,L3,CC
- sd L2,-24(P1)
-
- sltu CC,L3,CC
- daddu L3,L3,R3
- sltu R3,L3,R3
- daddu P2,P2,32
- daddu CC,CC,R3
-
- daddu L4,L4,CC
- daddu P3,P3,32
- sltu CC,L4,CC
- daddu L4,L4,R4
- sltu R4,L4,R4
- subu P4,P4,4
- sd L3,-16(P1)
- daddu CC,CC,R4
- sd L4,-8(P1)
-
- bgtz P4,$lab64
- b $lab65
-$lab66:
- ld L1,0(P2)
- ld R1,0(P3)
- daddu L1,L1,CC
- daddu P1,P1,8
- sltu CC,L1,CC
- daddu P2,P2,8
- daddu P3,P3,8
- daddu L1,L1,R1
- subu P4,P4,1
- sltu R1,L1,R1
- sd L1,-8(P1)
- daddu CC,CC,R1
-
- bgtz P4,$lab66
- j $31
-$lab65:
- addu P4,P4,4
- bgtz P4,$lab66
- j $31
- .end bn_add_words
-
-#if 1
- # Program Unit: bn_div64
- .set at
- .set reorder
- .text
- .align 2
- .globl bn_div64
- # 321 {
- .ent bn_div64
-bn_div64:
- dsubu $sp, 64
- sd $31, 56($sp)
- sd $16, 48($sp)
- .mask 0x80010000, -56
- .frame $sp, 64, $31
- move $9, $4
- move $12, $5
- move $16, $6
- # 322 BN_ULONG dh,dl,q,ret=0,th,tl,t;
- move $31, $0
- # 323 int i,count=2;
- li $13, 2
- # 324
- # 325 if (d == 0) return(BN_MASK2);
- bne $16, 0, $80
- dli $2, -1
- b $93
-$80:
- # 326
- # 327 i=BN_num_bits_word(d);
- move $4, $16
- sd $31, 16($sp)
- sd $9, 24($sp)
- sd $12, 32($sp)
- sd $13, 40($sp)
- .livereg 0x800ff0e,0xfff
- jal BN_num_bits_word
- dli $4, 64
- ld $31, 16($sp)
- ld $9, 24($sp)
- ld $12, 32($sp)
- ld $13, 40($sp)
- move $3, $2
- # 328 if ((i != BN_BITS2) && (h > (BN_ULONG)1<<i))
- beq $2, $4, $81
- dli $14, 1
- dsll $15, $14, $2
- bleu $9, $15, $81
- # 329 {
- # 330 #if !defined(NO_STDIO) && !defined(WIN16)
- # 331 fprintf(stderr,"Division would overflow (%d)\n",i);
- # 332 #endif
- # 333 abort();
- sd $3, 8($sp)
- sd $31, 16($sp)
- sd $9, 24($sp)
- sd $12, 32($sp)
- sd $13, 40($sp)
- .livereg 0xff0e,0xfff
- jal abort
- dli $4, 64
- ld $3, 8($sp)
- ld $31, 16($sp)
- ld $9, 24($sp)
- ld $12, 32($sp)
- ld $13, 40($sp)
- # 334 }
-$81:
- # 335 i=BN_BITS2-i;
- dsubu $3, $4, $3
- # 336 if (h >= d) h-=d;
- bltu $9, $16, $82
- dsubu $9, $9, $16
-$82:
- # 337
- # 338 if (i)
- beq $3, 0, $83
- # 339 {
- # 340 d<<=i;
- dsll $16, $16, $3
- # 341 h=(h<<i)|(l>>(BN_BITS2-i));
- dsll $24, $9, $3
- dsubu $25, $4, $3
- dsrl $14, $12, $25
- or $9, $24, $14
- # 342 l<<=i;
- dsll $12, $12, $3
- # 343 }
-$83:
- # 344 dh=(d&BN_MASK2h)>>BN_BITS4;
- # 345 dl=(d&BN_MASK2l);
- and $8, $16,0xFFFFFFFF00000000
- dsrl $8, $8, 32
- # dli $10,0xFFFFFFFF # Is this needed?
- # and $10, $16, $10
- dsll $10, $16, 32
- dsrl $10, $10, 32
- dli $6,0xFFFFFFFF00000000
-$84:
- # 346 for (;;)
- # 347 {
- # 348 if ((h>>BN_BITS4) == dh)
- dsrl $15, $9, 32
- bne $8, $15, $85
- # 349 q=BN_MASK2l;
- dli $5, 0xFFFFFFFF
- b $86
-$85:
- # 350 else
- # 351 q=h/dh;
- ddivu $5, $9, $8
-$86:
- # 352
- # 353 for (;;)
- # 354 {
- # 355 t=(h-q*dh);
- dmul $4, $5, $8
- dsubu $2, $9, $4
- move $3, $2
- # 356 if ((t&BN_MASK2h) ||
- # 357 ((dl*q) <= (
- # 358 (t<<BN_BITS4)+
- # 359 ((l&BN_MASK2h)>>BN_BITS4))))
- and $25, $2, $6
- bne $25, $0, $87
- dmul $24, $10, $5
- dsll $14, $3, 32
- and $15, $12, $6
- dsrl $25, $15, 32
- daddu $15, $14, $25
- bgtu $24, $15, $88
-$87:
- # 360 break;
- dmul $3, $10, $5
- b $89
-$88:
- # 361 q--;
- daddu $5, $5, -1
- # 362 }
- b $86
-$89:
- # 363 th=q*dh;
- # 364 tl=q*dl;
- # 365 t=(tl>>BN_BITS4);
- # 366 tl=(tl<<BN_BITS4)&BN_MASK2h;
- dsll $14, $3, 32
- and $2, $14, $6
- move $11, $2
- # 367 th+=t;
- dsrl $25, $3, 32
- daddu $7, $4, $25
- # 368
- # 369 if (l < tl) th++;
- bgeu $12, $2, $90
- daddu $7, $7, 1
-$90:
- # 370 l-=tl;
- dsubu $12, $12, $11
- # 371 if (h < th)
- bgeu $9, $7, $91
- # 372 {
- # 373 h+=d;
- daddu $9, $9, $16
- # 374 q--;
- daddu $5, $5, -1
- # 375 }
-$91:
- # 376 h-=th;
- dsubu $9, $9, $7
- # 377
- # 378 if (--count == 0) break;
- addu $13, $13, -1
- beq $13, 0, $92
- # 379
- # 380 ret=q<<BN_BITS4;
- dsll $31, $5, 32
- # 381 h=((h<<BN_BITS4)|(l>>BN_BITS4))&BN_MASK2;
- dsll $24, $9, 32
- dsrl $15, $12, 32
- or $9, $24, $15
- # 382 l=(l&BN_MASK2l)<<BN_BITS4;
- and $12, $12, 0xFFFFFFFF
- dsll $12, $12, 32
- # 383 }
- b $84
-$92:
- # 384 ret|=q;
- or $31, $31, $5
- # 385 return(ret);
- move $2, $31
-$93:
- ld $16, 48($sp)
- ld $31, 56($sp)
- daddu $sp, 64
- j $31
- .end bn_div64
-#endif
+++ /dev/null
-/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
- * All rights reserved.
- *
- * This package is an SSL implementation written
- * by Eric Young (eay@cryptsoft.com).
- * The implementation was written so as to conform with Netscapes SSL.
- *
- * This library is free for commercial and non-commercial use as long as
- * the following conditions are aheared to. The following conditions
- * apply to all code found in this distribution, be it the RC4, RSA,
- * lhash, DES, etc., code; not just the SSL code. The SSL documentation
- * included with this distribution is covered by the same copyright terms
- * except that the holder is Tim Hudson (tjh@cryptsoft.com).
- *
- * Copyright remains Eric Young's, and as such any Copyright notices in
- * the code are not to be removed.
- * If this package is used in a product, Eric Young should be given attribution
- * as the author of the parts of the library used.
- * This can be in the form of a textual message at program startup or
- * in documentation (online or textual) provided with the package.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * "This product includes cryptographic software written by
- * Eric Young (eay@cryptsoft.com)"
- * The word 'cryptographic' can be left out if the rouines from the library
- * being used are not cryptographic related :-).
- * 4. If you include any Windows specific code (or a derivative thereof) from
- * the apps directory (application code) you must include an acknowledgement:
- * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
- *
- * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * The licence and distribution terms for any publically available version or
- * derivative of this code cannot be changed. i.e. this code cannot simply be
- * copied and put under another distribution licence
- * [including the GNU Public Licence.]
- */
-
-SV *new_ref(char *type, char *obj, int mort)
-{
- SV *ret;
-
- if (mort)
- ret=sv_newmortal();
- else
- ret=newSViv(0);
- sv_setref_pv(ret,type,(void *)obj);
- return(ret);
- }
-
-int ex_new(char *obj, SV *data, CRYPTO_EX_DATA *ad, int idx, long argl,
- char *argp)
- {
- SV *sv;
-
-fprintf(stderr,"ex_new idx=%d %08X %s\n",idx,obj,argp);
- sv=sv_newmortal();
- sv_setref_pv(sv,argp,(void *)obj);
- CRYPTO_set_ex_data(ad,idx,(char *)sv);
- return(1);
- }
-
-void ex_cleanup(char *obj, SV *data, CRYPTO_EX_DATA *ad, int idx, long argl,
- char *argp)
- {
- pr_name("ex_cleanup");
-fprintf(stderr,"ex_cleanup %08X %s\n",obj,argp);
- if (data != NULL)
- SvREFCNT_dec((SV *)data);
- }
-