From f3f8d4f19ede0a799c06d5082dea8a57cbe9eee0 Mon Sep 17 00:00:00 2001 From: aureooms Date: Tue, 2 Sep 2014 23:07:12 +0200 Subject: [PATCH] little endian version of mul53 + fixes + coverage for mul53 --- js/dist/alu.js | 63 ++++++++++++++++++++++---- js/dist/alu.js.map | 2 +- js/dist/alu.min.js | 2 +- js/src/abs/abs.js | 2 +- js/src/mul/mul53.js | 63 ++++++++++++++++++++++---- test/js/src/mul53.js | 105 +++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 216 insertions(+), 21 deletions(-) create mode 100644 test/js/src/mul53.js diff --git a/js/dist/alu.js b/js/dist/alu.js index c4eb7f5..242065a 100644 --- a/js/dist/alu.js +++ b/js/dist/alu.js @@ -9,7 +9,7 @@ * COMPUTE THE ABSOLUTE VALUE OF NUMBER n */ -exports.abs = function abs() {}; +// exports.abs = function abs() {}; /* js/src/add */ @@ -672,7 +672,7 @@ var bmul53_t = function(r){ /** * Multiply two blocks, result is put in a 1 or 2 blocks big endian array. - * i <= 1, j <= 1, k <= 2 + * aj - ai <= 1, bj - bi <= 1, cj - ci <= 2 * * * @param {array} a first operand @@ -688,19 +688,15 @@ var bmul53_t = function(r){ var mul = function(a, ai, aj, b, bi, bj, c, ci, cj){ - var v, i, j, k; - - i = aj - ai; - j = bj - bi; - k = cj - ci; + var v; // EMPTY CASE - if (i <= 0 || j <= 0 || k <= 0) return; + if (aj <= ai || bj <= bi || cj <= ci) return; v = a[ai] * b[bi]; c[cj-1] = v % r; - if (k > 1) { + if (cj > ci + 1) { c[cj-2] = (v - c[cj-1]) / r; } @@ -712,6 +708,55 @@ var bmul53_t = function(r){ exports.bmul53_t = bmul53_t; + + +/** + * /!\ BLOCK MULTIPLICATION RESULT MUST HOLD IN THE JAVASCRIPT NUMBER TYPE (DOUBLE i.e. 53 bits) + * + * little endian 1 block multiplication + * + */ + +var lmul53_t = function(r){ + + /** + * Multiply two blocks, result is put in a 1 or 2 blocks little endian array. + * aj - ai <= 1, bj - bi <= 1, cj - ci <= 2 + * + * + * @param {array} a first operand + * @param {int} ai a left + * @param {int} aj a right + * @param {array} b second operand + * @param {int} bi b left + * @param {int} bj b right + * @param {array} c result, must be 0 initialized + * @param {int} ci c left + * @param {int} cj c right + */ + + var mul = function(a, ai, aj, b, bi, bj, c, ci, cj){ + + var v; + + // EMPTY CASE + if (aj <= ai || bj <= bi || cj <= ci) return; + + v = a[ai] * b[bi]; + c[ci] = v % r; + + if (cj > ci + 1) { + c[ci+1] = (v - c[ci]) / r; + } + + }; + + return mul; + +}; + + +exports.lmul53_t = lmul53_t; /* js/src/neg */ /* js/src/neg/neg.js */ /** diff --git a/js/dist/alu.js.map b/js/dist/alu.js.map index ea57307..75841aa 100644 --- a/js/dist/alu.js.map +++ b/js/dist/alu.js.map @@ -1 +1 @@ -{"version":3,"file":"js/dist//alu.js.map","sources":["js/dist//alu.js"],"names":["exports","undefined","abs","badd_t","r","a","i0","i1","b","j0","j1","c","k0","k1","t","C","and","ladd_t","a0","b0","c0","c1","band_t","_r","a1","b1","at","ct","land_t","bcmp_t","ai","aj","bi","bj","tmp","lcmp_t","eq_t","cmp","ge_t","gt_t","le_t","lt_t","ne_t","bdiv_t","mov","lt","sub","div","q","qi","qj","ri","rj","k","bkaratsuba_t","add","mul","calloc","wrap","karatsuba","ci","cj","z0","z2","t1","t2","t3","n","I","N","N_","i_","j_","i","j","Math","ceil","max","bmul_t","ak","u","v","w","y","z","ck","bmul53_t","parse_t","f","iter","log","s","si","sj","len","block","parseInt","slice","stringify_t","zfill_t","zfill","push","Number","toString","join","bsub_t","T","lsub_t","wrapbin","fn","wrapmov","this"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"js/dist//alu.js.map","sources":["js/dist//alu.js"],"names":["exports","undefined","badd_t","r","a","i0","i1","b","j0","j1","c","k0","k1","t","C","and","ladd_t","a0","b0","c0","c1","band_t","_r","a1","b1","at","ct","land_t","bcmp_t","ai","aj","bi","bj","tmp","lcmp_t","eq_t","cmp","ge_t","gt_t","le_t","lt_t","ne_t","bdiv_t","mov","lt","sub","div","q","qi","qj","ri","rj","k","bkaratsuba_t","add","mul","calloc","wrap","karatsuba","ci","cj","z0","z2","t1","t2","t3","n","I","N","N_","i_","j_","i","j","Math","ceil","max","bmul_t","ak","u","v","w","y","z","ck","bmul53_t","lmul53_t","parse_t","f","iter","log","s","si","sj","len","block","parseInt","slice","stringify_t","zfill_t","zfill","push","Number","toString","join","bsub_t","T","lsub_t","wrapbin","fn","wrapmov","this"],"mappings":"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"} \ No newline at end of file diff --git a/js/dist/alu.min.js b/js/dist/alu.min.js index 8c2f9fd..58e6234 100644 --- a/js/dist/alu.min.js +++ b/js/dist/alu.min.js @@ -1,2 +1,2 @@ -!function(r,n){"use strict";r.abs=function(){},r.badd_t=function(r){return function(n,t,o,f,u,i,e,a,c){for(var v,l=0;--i>=u;)--o,--c,v=n[o]+f[i]+l,e[c]=v%r,l=v/r>=1;for(;--o>=t;)--c,v=n[o]+l,e[c]=v%r,l=v/r>=1;--c>=a&&(e[c]=+l)}};var t=(r.ladd_t=function(r){return function(n,t,o,f,u,i,e,a,c){for(var v,l=0;i>u;)v=n[t]+f[u]+l,e[a]=v%r,l=v/r>=1,++t,++u,++a;for(;o>t;)v=n[t]+l,e[a]=v%r,l=v/r>=1,++t,++a;c>a&&(e[a]=+l)}},function(r,n,t,o,f,u,i){for(;i>u;)f[u++]=r[n++]&t[o++]}),o=function(r){var n=r/2;return function(r,t,o,f,u,i,e,a,c){var v=o-i+u,l=a+v-t;if(f[u]a;)e[a++]=0;else for(;l>a;)e[a++]=r[t++];for(;c>a;)e[a++]=r[v++]&f[u++]}},f=function(r){var n=r/2;return function(r,t,o,f,u,i,e,a,c){for(var v=a+i-u;v>a;)e[a++]=r[t++]&f[u++];if(f[u-1]a;)e[a++]=0;else for(;c>a;)e[a++]=r[t++]}};r.and=t,r.land_t=f,r.band_t=o;var u=function(){return function(r,n,t,o,f,u){for(var i=t-u+f;i>n;++n)if(r[n]>0)return 1;for(;t>n;++n,++f){if(r[n]>o[f])return 1;if(r[n]=i;--t)if(r[t]>0)return 1;for(;t>=n;--t,--u){if(r[t]>o[u])return 1;if(r[t]=0}};r.ge_t=a;var c=function(r){return function(n,t,o,f,u,i){return r(n,t,o,f,u,i)>0}};r.gt_t=c;var v=function(r){return function(n,t,o,f,u,i){return r(n,t,o,f,u,i)<=0}};r.le_t=v;var l=function(r){return function(n,t,o,f,u,i){return r(n,t,o,f,u,i)<0}};r.lt_t=l;var d=function(r){return function(n,t,o,f,u,i){return 0!==r(n,t,o,f,u,i)}};r.ne_t=d;var m=function(r,n,t){var o=function(o,f,u,i,e,a,c,v,l,d,m,_){var s,h=m+1;r(o,f,u,d,m);do{for(;_>m&&0===d[m];)++m;for(s=m+1;_>=s&&n(d,m,s,i,e,a);)++s;if(s>_)break;do++c[v+s-h],t(d,m,s,i,e,a,d,m,s);while(!n(d,m,s,i,e,a))}while(_>=s)};return o};r.bdiv_t=m;var _=function(r,t,o,f,u,i,e){var a=function(n,e,a,c,v,l,d,m,_){var s,h,p,b,w,g,x,M,k,y,j,q,I,N;q=a-e,I=l-v,N=_-m,0>=q||0>=I||0>=N||(1===q?(s=n[e]*c[v],d[_-1]=s%i,N>1&&(d[_-2]=(s-d[_-1])/i)):(g=Math.ceil(q/2),x=q+I,M=2*g,k=x-M,y=a-g,j=Math.max(v,l-g),p=f(g+1),b=f(g+1),w=f(M+1),h=f(k),s=f(M),o(n,e,y,c,v,j,h,0,k),o(n,y,a,c,j,l,s,0,M),r(n,y,a,n,e,y,p,0,g+1),r(c,v,j,c,j,l,b,0,g+1),o(p,1,g+1,b,1,g+1,w,1,M+1),u(h,0,k,d,_-x),u(s,0,M,d,_-M),p[0]&&r(w,0,M+1-g,b,1,g+1,w,0,M+1-g),b[0]&&r(w,0,M+1-g,p,1,g+1,w,0,M+1-g),p[0]&&b[0]&&r(w,0,M-g,p,0,1,w,0,M-g),r(d,m,_-g,w,0,M+1,d,m,_-g),t(d,m,_-g,h,0,k,d,m,_-g),t(d,m,_-g,s,0,M,d,m,_-g)))};return e!==n&&(a=e(a)),o===n&&(o=a),a};r.bkaratsuba_t=_;var s=function(r){var n=function(n,t,o,f,u,i,e,a,c){for(var v,l,d,m,_,s,h,p,b=--c;i-->u&&b>=a;){for(v=o,s=0;v-->t&&b>=a;--b){for(d=f[i]*n[v],m=d%r,_=e[b]+m+s,h=_%r,e[b]=h,p=(_-h)/r,l=b-1;p>0&&l>=a;--l)_=e[l]+p,h=_%r,e[l]=h,p=(_-h)/r;s=(d-m)/r}b=--c}};return n};r.bmul_t=s;var h=function(r){var n=function(n,t,o,f,u,i,e,a,c){var v,l,d,m;l=o-t,d=i-u,m=c-a,0>=l||0>=d||0>=m||(v=n[t]*f[u],e[c-1]=v%r,m>1&&(e[c-2]=(v-e[c-1])/r))};return n};r.bmul53_t=h;var p=function(r,n,t){if(r>=n){if(n>36)throw"f > 36 not implemented";for(var o=0,f=r;f>=n&&!(f%n);)f/=n,++o;if(1!==f)throw"log(f) does not divide log(t) not implemented";return function(r,f,u,i,e,a){var c=u-f,v=u-o,l=Math.ceil(c/o),d=function(t){i[t]=parseInt(r.slice(Math.max(0,v),v+o),n),v-=o};t(a-l,a,d)}}throw"f > t not implemented"};r.parse_t=p;var b=function(r,n,t,o){if(r>=n){if(n>36)throw"t > 36 not implemented";for(var f=0;r>=n&&!(r%n);)r/=n,++f;if(1!==r)throw"log(t) does not divide log(f) not implemented";var u=o(f);return function(r,o,f){var i=[];return t(o,f,function(t){i.push(u(Number(+r[t]).toString(n)))}),i.join("")}}throw"t > f not implemented"};r.stringify_t=b;var w=function(r){return function(n,t,o,f,u,i,e,a,c){for(var v,l=0;--i>=u;)--o,--c,v=l,l=n[o]=t;)--c,v=l,l=n[o]=a;)e[c]=r-1}},g=function(r){return function(n,t,o,f,u,i,e,a,c){for(var v,l=0;i>u;)v=l,l=n[t]t;)v=l,l=n[t]a;)e[a]=r-1,++a}};r.bsub_t=w,r.lsub_t=g;var x=function(r){return function(n,t,o,f,u,i,e,a,c){var v,l,d;return a=Math.max(0,a),d=c-a,t=Math.max(0,t,o-d),u=Math.max(0,u,i-d),v=o-t,l=i-u,l>v?r(f,u,i,n,t,o,e,a,c):r(n,t,o,f,u,i,e,a,c)}},M=function(r){return function(n,t,o,f,u){return 0>t&&(u-=t,t=0),0>u&&(t-=u,u=0),r(n,t,o,f,u)}};r.wrapbin=x,r.wrapmov=M}("undefined"==typeof exports?this.alu={}:exports); +!function(r,n){"use strict";r.badd_t=function(r){return function(n,t,o,f,u,i,e,a,c){for(var v,l=0;--i>=u;)--o,--c,v=n[o]+f[i]+l,e[c]=v%r,l=v/r>=1;for(;--o>=t;)--c,v=n[o]+l,e[c]=v%r,l=v/r>=1;--c>=a&&(e[c]=+l)}};var t=(r.ladd_t=function(r){return function(n,t,o,f,u,i,e,a,c){for(var v,l=0;i>u;)v=n[t]+f[u]+l,e[a]=v%r,l=v/r>=1,++t,++u,++a;for(;o>t;)v=n[t]+l,e[a]=v%r,l=v/r>=1,++t,++a;c>a&&(e[a]=+l)}},function(r,n,t,o,f,u,i){for(;i>u;)f[u++]=r[n++]&t[o++]}),o=function(r){var n=r/2;return function(r,t,o,f,u,i,e,a,c){var v=o-i+u,l=a+v-t;if(f[u]a;)e[a++]=0;else for(;l>a;)e[a++]=r[t++];for(;c>a;)e[a++]=r[v++]&f[u++]}},f=function(r){var n=r/2;return function(r,t,o,f,u,i,e,a,c){for(var v=a+i-u;v>a;)e[a++]=r[t++]&f[u++];if(f[u-1]a;)e[a++]=0;else for(;c>a;)e[a++]=r[t++]}};r.and=t,r.land_t=f,r.band_t=o;var u=function(){return function(r,n,t,o,f,u){for(var i=t-u+f;i>n;++n)if(r[n]>0)return 1;for(;t>n;++n,++f){if(r[n]>o[f])return 1;if(r[n]=i;--t)if(r[t]>0)return 1;for(;t>=n;--t,--u){if(r[t]>o[u])return 1;if(r[t]=0}};r.ge_t=a;var c=function(r){return function(n,t,o,f,u,i){return r(n,t,o,f,u,i)>0}};r.gt_t=c;var v=function(r){return function(n,t,o,f,u,i){return r(n,t,o,f,u,i)<=0}};r.le_t=v;var l=function(r){return function(n,t,o,f,u,i){return r(n,t,o,f,u,i)<0}};r.lt_t=l;var d=function(r){return function(n,t,o,f,u,i){return 0!==r(n,t,o,f,u,i)}};r.ne_t=d;var m=function(r,n,t){var o=function(o,f,u,i,e,a,c,v,l,d,m,_){var h,s=m+1;r(o,f,u,d,m);do{for(;_>m&&0===d[m];)++m;for(h=m+1;_>=h&&n(d,m,h,i,e,a);)++h;if(h>_)break;do++c[v+h-s],t(d,m,h,i,e,a,d,m,h);while(!n(d,m,h,i,e,a))}while(_>=h)};return o};r.bdiv_t=m;var _=function(r,t,o,f,u,i,e){var a=function(n,e,a,c,v,l,d,m,_){var h,s,p,b,w,g,x,M,k,y,j,q,I,N;q=a-e,I=l-v,N=_-m,0>=q||0>=I||0>=N||(1===q?(h=n[e]*c[v],d[_-1]=h%i,N>1&&(d[_-2]=(h-d[_-1])/i)):(g=Math.ceil(q/2),x=q+I,M=2*g,k=x-M,y=a-g,j=Math.max(v,l-g),p=f(g+1),b=f(g+1),w=f(M+1),s=f(k),h=f(M),o(n,e,y,c,v,j,s,0,k),o(n,y,a,c,j,l,h,0,M),r(n,y,a,n,e,y,p,0,g+1),r(c,v,j,c,j,l,b,0,g+1),o(p,1,g+1,b,1,g+1,w,1,M+1),u(s,0,k,d,_-x),u(h,0,M,d,_-M),p[0]&&r(w,0,M+1-g,b,1,g+1,w,0,M+1-g),b[0]&&r(w,0,M+1-g,p,1,g+1,w,0,M+1-g),p[0]&&b[0]&&r(w,0,M-g,p,0,1,w,0,M-g),r(d,m,_-g,w,0,M+1,d,m,_-g),t(d,m,_-g,s,0,k,d,m,_-g),t(d,m,_-g,h,0,M,d,m,_-g)))};return e!==n&&(a=e(a)),o===n&&(o=a),a};r.bkaratsuba_t=_;var h=function(r){var n=function(n,t,o,f,u,i,e,a,c){for(var v,l,d,m,_,h,s,p,b=--c;i-->u&&b>=a;){for(v=o,h=0;v-->t&&b>=a;--b){for(d=f[i]*n[v],m=d%r,_=e[b]+m+h,s=_%r,e[b]=s,p=(_-s)/r,l=b-1;p>0&&l>=a;--l)_=e[l]+p,s=_%r,e[l]=s,p=(_-s)/r;h=(d-m)/r}b=--c}};return n};r.bmul_t=h;var s=function(r){var n=function(n,t,o,f,u,i,e,a,c){var v;t>=o||u>=i||a>=c||(v=n[t]*f[u],e[c-1]=v%r,c>a+1&&(e[c-2]=(v-e[c-1])/r))};return n};r.bmul53_t=s;var p=function(r){var n=function(n,t,o,f,u,i,e,a,c){var v;t>=o||u>=i||a>=c||(v=n[t]*f[u],e[a]=v%r,c>a+1&&(e[a+1]=(v-e[a])/r))};return n};r.lmul53_t=p;var b=function(r,n,t){if(r>=n){if(n>36)throw"f > 36 not implemented";for(var o=0,f=r;f>=n&&!(f%n);)f/=n,++o;if(1!==f)throw"log(f) does not divide log(t) not implemented";return function(r,f,u,i,e,a){var c=u-f,v=u-o,l=Math.ceil(c/o),d=function(t){i[t]=parseInt(r.slice(Math.max(0,v),v+o),n),v-=o};t(a-l,a,d)}}throw"f > t not implemented"};r.parse_t=b;var w=function(r,n,t,o){if(r>=n){if(n>36)throw"t > 36 not implemented";for(var f=0;r>=n&&!(r%n);)r/=n,++f;if(1!==r)throw"log(t) does not divide log(f) not implemented";var u=o(f);return function(r,o,f){var i=[];return t(o,f,function(t){i.push(u(Number(+r[t]).toString(n)))}),i.join("")}}throw"t > f not implemented"};r.stringify_t=w;var g=function(r){return function(n,t,o,f,u,i,e,a,c){for(var v,l=0;--i>=u;)--o,--c,v=l,l=n[o]=t;)--c,v=l,l=n[o]=a;)e[c]=r-1}},x=function(r){return function(n,t,o,f,u,i,e,a,c){for(var v,l=0;i>u;)v=l,l=n[t]t;)v=l,l=n[t]a;)e[a]=r-1,++a}};r.bsub_t=g,r.lsub_t=x;var M=function(r){return function(n,t,o,f,u,i,e,a,c){var v,l,d;return a=Math.max(0,a),d=c-a,t=Math.max(0,t,o-d),u=Math.max(0,u,i-d),v=o-t,l=i-u,l>v?r(f,u,i,n,t,o,e,a,c):r(n,t,o,f,u,i,e,a,c)}},k=function(r){return function(n,t,o,f,u){return 0>t&&(u-=t,t=0),0>u&&(t-=u,u=0),r(n,t,o,f,u)}};r.wrapbin=M,r.wrapmov=k}("undefined"==typeof exports?this.alu={}:exports); //# sourceMappingURL=js/dist//alu.js.map \ No newline at end of file diff --git a/js/src/abs/abs.js b/js/src/abs/abs.js index c2b42cd..52c8808 100644 --- a/js/src/abs/abs.js +++ b/js/src/abs/abs.js @@ -2,5 +2,5 @@ * COMPUTE THE ABSOLUTE VALUE OF NUMBER n */ -exports.abs = function abs() {}; +// exports.abs = function abs() {}; diff --git a/js/src/mul/mul53.js b/js/src/mul/mul53.js index e992cfa..dd9f456 100644 --- a/js/src/mul/mul53.js +++ b/js/src/mul/mul53.js @@ -9,7 +9,7 @@ var bmul53_t = function(r){ /** * Multiply two blocks, result is put in a 1 or 2 blocks big endian array. - * i <= 1, j <= 1, k <= 2 + * aj - ai <= 1, bj - bi <= 1, cj - ci <= 2 * * * @param {array} a first operand @@ -25,19 +25,15 @@ var bmul53_t = function(r){ var mul = function(a, ai, aj, b, bi, bj, c, ci, cj){ - var v, i, j, k; - - i = aj - ai; - j = bj - bi; - k = cj - ci; + var v; // EMPTY CASE - if (i <= 0 || j <= 0 || k <= 0) return; + if (aj <= ai || bj <= bi || cj <= ci) return; v = a[ai] * b[bi]; c[cj-1] = v % r; - if (k > 1) { + if (cj > ci + 1) { c[cj-2] = (v - c[cj-1]) / r; } @@ -48,4 +44,53 @@ var bmul53_t = function(r){ }; -exports.bmul53_t = bmul53_t; \ No newline at end of file +exports.bmul53_t = bmul53_t; + + +/** + * /!\ BLOCK MULTIPLICATION RESULT MUST HOLD IN THE JAVASCRIPT NUMBER TYPE (DOUBLE i.e. 53 bits) + * + * little endian 1 block multiplication + * + */ + +var lmul53_t = function(r){ + + /** + * Multiply two blocks, result is put in a 1 or 2 blocks little endian array. + * aj - ai <= 1, bj - bi <= 1, cj - ci <= 2 + * + * + * @param {array} a first operand + * @param {int} ai a left + * @param {int} aj a right + * @param {array} b second operand + * @param {int} bi b left + * @param {int} bj b right + * @param {array} c result, must be 0 initialized + * @param {int} ci c left + * @param {int} cj c right + */ + + var mul = function(a, ai, aj, b, bi, bj, c, ci, cj){ + + var v; + + // EMPTY CASE + if (aj <= ai || bj <= bi || cj <= ci) return; + + v = a[ai] * b[bi]; + c[ci] = v % r; + + if (cj > ci + 1) { + c[ci+1] = (v - c[ci]) / r; + } + + }; + + return mul; + +}; + + +exports.lmul53_t = lmul53_t; \ No newline at end of file diff --git a/test/js/src/mul53.js b/test/js/src/mul53.js new file mode 100644 index 0000000..d5ac923 --- /dev/null +++ b/test/js/src/mul53.js @@ -0,0 +1,105 @@ + + +var algo = require("algo"); +var util = require("util"); +var fmt = util.format; +var randint = algo.randint; + + +var runtest = function(name, n, mul53_t, hb, lb, r, calloc){ + + console.log(fmt("%s %d", name, r)); + + test(name, function(){ + + var i, x, y, z, a, b, c, d, v, w; + + var mul53 = mul53_t(r); + + for (i = 0; i < n; ++i) { + x = randint(0, r); + y = randint(0, r); + z = x * y; + + // 0 BLOCK + + a = calloc(1); + b = calloc(1); + + a[0] = x; + b[0] = y; + + c = calloc(2); + d = calloc(2); + mul53(a, 0, 1, b, 0, 1, c, 0, 0); + deepEqual(c, d, "c zero check 1"); + + c = calloc(2); + d = calloc(2); + mul53(a, 0, 0, b, 0, 1, c, 0, 2); + deepEqual(c, d, "c zero check 2"); + + c = calloc(2); + d = calloc(2); + mul53(a, 0, 1, b, 1, 1, c, 0, 2); + deepEqual(c, d, "c zero check 3"); + + + // 1 BLOCK + + a = calloc(1); + b = calloc(1); + c = calloc(2); + + a[0] = x; + b[0] = y; + mul53(a, 0, 1, b, 0, 1, c, 0, 1); + v = c[0]; + mul53(a, 0, 1, b, 0, 1, c, 1, 2); + w = c[1]; + + deepEqual(v, w, "index independence check"); + deepEqual(v, z % r, fmt("(%d * %d) %% %d = %d", x, y, r, z)); + + + // 2 BLOCKS + + a = calloc(1); + b = calloc(1); + c = calloc(2); + + a[0] = x; + b[0] = y; + mul53(a, 0, 1, b, 0, 1, c, 0, 2); + v = c[hb] * r + c[lb]; + + deepEqual(v, z, fmt("%d * %d = %d", x, y, z)); + + } + + }); + + +}; + + + +var n = 10; +var R = function(range){ return 2 + randint(0, range - 2)}; +var Rlen = 5; +var MUL53 = [alu.lmul53_t, alu.bmul53_t]; +var HB = [1, 0]; +var LB = [0, 1]; +var NAME = ["alu.lmul53_t", "alu.bmul53_t"]; +var ALLOC = [ + function(n){ return new Uint16Array(n); } +]; +var RANGE = [ + Math.pow(2, Uint16Array.BYTES_PER_ELEMENT * 8) +]; +var i, j, k; + +for (i = 0; i < MUL53.length; ++i) +for (j = 0; j < ALLOC.length; ++j) +for (k = 0; k < Rlen; ++k) +runtest(NAME[i], n, MUL53[i], HB[i], LB[i], R(RANGE[j]), ALLOC[j]); \ No newline at end of file