Add RSAZ assembly modules.
[openssl.git] / crypto / bn / bn_asm.c
index dd00277e54a5dace1d801e4a26a5c651fd6463e5..c43c91cc09f485fa615eddc61ddb81d20e792bf4 100644 (file)
@@ -68,7 +68,7 @@
 
 #if defined(BN_LLONG) || defined(BN_UMULT_HIGH)
 
-BN_ULONG bn_mul_add_words(BN_ULONG *rp, const BN_ULONG *ap, size_t num, BN_ULONG w)
+BN_ULONG bn_mul_add_words(BN_ULONG *rp, const BN_ULONG *ap, int num, BN_ULONG w)
        {
        BN_ULONG c1=0;
 
@@ -94,7 +94,7 @@ BN_ULONG bn_mul_add_words(BN_ULONG *rp, const BN_ULONG *ap, size_t num, BN_ULONG
        return(c1);
        } 
 
-BN_ULONG bn_mul_words(BN_ULONG *rp, const BN_ULONG *ap, size_t num, BN_ULONG w)
+BN_ULONG bn_mul_words(BN_ULONG *rp, const BN_ULONG *ap, int num, BN_ULONG w)
        {
        BN_ULONG c1=0;
 
@@ -119,7 +119,7 @@ BN_ULONG bn_mul_words(BN_ULONG *rp, const BN_ULONG *ap, size_t num, BN_ULONG w)
        return(c1);
        } 
 
-void bn_sqr_words(BN_ULONG *r, const BN_ULONG *a, size_t n)
+void bn_sqr_words(BN_ULONG *r, const BN_ULONG *a, int n)
         {
        assert(n >= 0);
        if (n <= 0) return;
@@ -303,7 +303,7 @@ BN_ULONG bn_div_words(BN_ULONG h, BN_ULONG l, BN_ULONG d)
 #endif /* !defined(BN_LLONG) && defined(BN_DIV2W) */
 
 #ifdef BN_LLONG
-BN_ULONG bn_add_words(BN_ULONG *r, const BN_ULONG *a, const BN_ULONG *b, size_t n)
+BN_ULONG bn_add_words(BN_ULONG *r, const BN_ULONG *a, const BN_ULONG *b, int n)
         {
        BN_ULLONG ll=0;
 
@@ -860,13 +860,35 @@ int bn_mul_mont(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp, const BN_U
 
        n0 = *n0p;
 
-       tp[num]   = bn_mul_words(tp,ap,num,bp[0]);
+       c0 = 0;
+       ml = bp[0];
+#ifdef mul64
+       mh = HBITS(ml);
+       ml = LBITS(ml);
+       for (j=0;j<num;++j)
+               mul(tp[j],ap[j],ml,mh,c0);
+#else
+       for (j=0;j<num;++j)
+               mul(tp[j],ap[j],ml,c0);
+#endif
+
+       tp[num]   = c0;
        tp[num+1] = 0;
        goto enter;
 
        for(i=0;i<num;i++)
                {
-               c0 = bn_mul_add_words(tp,ap,num,bp[i]);
+               c0 = 0;
+               ml = bp[i];
+#ifdef mul64
+               mh = HBITS(ml);
+               ml = LBITS(ml);
+               for (j=0;j<num;++j)
+                       mul_add(tp[j],ap[j],ml,mh,c0);
+#else
+               for (j=0;j<num;++j)
+                       mul_add(tp[j],ap[j],ml,c0);
+#endif
                c1 = (tp[num] + c0)&BN_MASK2;
                tp[num]   = c1;
                tp[num+1] = (c1<c0?1:0);