Small bugfix: even when r == d, we need to adjust r and q.
[openssl.git] / crypto / bn / asm / vms.mar
index 6bd0e87a9a22d5999e12b812c2e0cfc0bfdd7603..a2ac41a556ee6a267c505c5e27fd890266f343be 100644 (file)
@@ -202,7 +202,7 @@ n=12 ;(AP)  n       by value (input)
 ;     r = r - d
 ;     q = q + 1
 ;   }
-; while (r > d)
+; while (r >= d)
 ;   {
 ;     r = r - d
 ;     q = q + 1
@@ -253,21 +253,21 @@ d=12 ;(AP)        d       by value (input)
 3$:
        tstl    r3
        bgeq    4$
-       incl    r6              ; since the high bit in r is set, set rprim
+       incl    r6              ; since the high bit in r is set, set r'
 4$:
-       ashl    #1,r2,r2
-       ashl    #1,r3,r3
-       addl    r5,r3
+       ashl    #1,r2,r2        ; q = q << 1
+       ashl    #1,r3,r3        ; r = r << 1
+       addl    r5,r3           ; r = r + a'
 
        tstl    r6
-       beql    5$
-       subl    r4,r3
-       incl    r2
+       beql    5$              ; if r'
+       subl    r4,r3           ;   r = r - d
+       incl    r2              ;   q = q + 1
 5$:
        cmpl    r3,r4
-       blequ   42$
-       subl    r4,r3
-       incl    r2
+       blssu   42$             ; while r >= d
+       subl    r4,r3           ;   r = r - d
+       incl    r2              ;   q = q + 1
        brb     5$      
 42$:
 ;      movl    r3,r1