@@ -25,14 +25,14 @@ <h1><a href="index.html">All files</a> base.js</h1>
2525 < div class ='fl pad1y space-right2 '>
2626 < span class ="strong "> 100% </ span >
2727 < span class ="quiet "> Statements</ span >
28- < span class ='fraction '> 236/236 </ span >
28+ < span class ='fraction '> 249/249 </ span >
2929 </ div >
3030
3131
3232 < div class ='fl pad1y space-right2 '>
3333 < span class ="strong "> 100% </ span >
3434 < span class ="quiet "> Branches</ span >
35- < span class ='fraction '> 30/30 </ span >
35+ < span class ='fraction '> 33/33 </ span >
3636 </ div >
3737
3838
@@ -46,7 +46,7 @@ <h1><a href="index.html">All files</a> base.js</h1>
4646 < div class ='fl pad1y space-right2 '>
4747 < span class ="strong "> 100% </ span >
4848 < span class ="quiet "> Lines</ span >
49- < span class ='fraction '> 236/236 </ span >
49+ < span class ='fraction '> 249/249 </ span >
5050 </ div >
5151
5252
@@ -299,7 +299,20 @@ <h1><a href="index.html">All files</a> base.js</h1>
299299< a name ='L234 '> </ a > < a href ='#L234 '> 234</ a >
300300< a name ='L235 '> </ a > < a href ='#L235 '> 235</ a >
301301< a name ='L236 '> </ a > < a href ='#L236 '> 236</ a >
302- < a name ='L237 '> </ a > < a href ='#L237 '> 237</ a > </ td > < td class ="line-coverage quiet "> < span class ="cline-any cline-yes "> 3x</ span >
302+ < a name ='L237 '> </ a > < a href ='#L237 '> 237</ a >
303+ < a name ='L238 '> </ a > < a href ='#L238 '> 238</ a >
304+ < a name ='L239 '> </ a > < a href ='#L239 '> 239</ a >
305+ < a name ='L240 '> </ a > < a href ='#L240 '> 240</ a >
306+ < a name ='L241 '> </ a > < a href ='#L241 '> 241</ a >
307+ < a name ='L242 '> </ a > < a href ='#L242 '> 242</ a >
308+ < a name ='L243 '> </ a > < a href ='#L243 '> 243</ a >
309+ < a name ='L244 '> </ a > < a href ='#L244 '> 244</ a >
310+ < a name ='L245 '> </ a > < a href ='#L245 '> 245</ a >
311+ < a name ='L246 '> </ a > < a href ='#L246 '> 246</ a >
312+ < a name ='L247 '> </ a > < a href ='#L247 '> 247</ a >
313+ < a name ='L248 '> </ a > < a href ='#L248 '> 248</ a >
314+ < a name ='L249 '> </ a > < a href ='#L249 '> 249</ a >
315+ < a name ='L250 '> </ a > < a href ='#L250 '> 250</ a > </ td > < td class ="line-coverage quiet "> < span class ="cline-any cline-yes "> 3x</ span >
303316< span class ="cline-any cline-yes "> 3x</ span >
304317< span class ="cline-any cline-yes "> 3x</ span >
305318< span class ="cline-any cline-yes "> 3x</ span >
@@ -429,7 +442,6 @@ <h1><a href="index.html">All files</a> base.js</h1>
429442< span class ="cline-any cline-yes "> 61x</ span >
430443< span class ="cline-any cline-yes "> 61x</ span >
431444< span class ="cline-any cline-yes "> 61x</ span >
432- < span class ="cline-any cline-yes "> 61x</ span >
433445< span class ="cline-any cline-yes "> 13x</ span >
434446< span class ="cline-any cline-yes "> 13x</ span >
435447< span class ="cline-any cline-yes "> 61x</ span >
@@ -467,16 +479,6 @@ <h1><a href="index.html">All files</a> base.js</h1>
467479< span class ="cline-any cline-yes "> 47x</ span >
468480< span class ="cline-any cline-yes "> 47x</ span >
469481< span class ="cline-any cline-yes "> 51x</ span >
470- < span class ="cline-any cline-yes "> 61x</ span >
471- < span class ="cline-any cline-yes "> 25x</ span >
472- < span class ="cline-any cline-yes "> 25x</ span >
473- < span class ="cline-any cline-yes "> 25x</ span >
474- < span class ="cline-any cline-yes "> 39x</ span >
475- < span class ="cline-any cline-yes "> 26x</ span >
476- < span class ="cline-any cline-yes "> 26x</ span >
477- < span class ="cline-any cline-yes "> 26x</ span >
478- < span class ="cline-any cline-yes "> 26x</ span >
479- < span class ="cline-any cline-yes "> 51x</ span >
480482< span class ="cline-any cline-yes "> 51x</ span >
481483< span class ="cline-any cline-yes "> 51x</ span >
482484< span class ="cline-any cline-yes "> 51x</ span >
@@ -492,26 +494,49 @@ <h1><a href="index.html">All files</a> base.js</h1>
492494< span class ="cline-any cline-yes "> 31x</ span >
493495< span class ="cline-any cline-yes "> 61x</ span >
494496< span class ="cline-any cline-yes "> 25x</ span >
497+ < span class ="cline-any cline-yes "> 5x</ span >
498+ < span class ="cline-any cline-yes "> 5x</ span >
499+ < span class ="cline-any cline-yes "> 25x</ span >
500+ < span class ="cline-any cline-yes "> 20x</ span >
501+ < span class ="cline-any cline-yes "> 20x</ span >
502+ < span class ="cline-any cline-yes "> 20x</ span >
503+ < span class ="cline-any cline-yes "> 25x</ span >
504+ < span class ="cline-any cline-yes "> 25x</ span >
505+ < span class ="cline-any cline-yes "> 25x</ span >
495506< span class ="cline-any cline-yes "> 61x</ span >
496507< span class ="cline-any cline-yes "> 61x</ span >
497508< span class ="cline-any cline-yes "> 61x</ span >
498509< span class ="cline-any cline-yes "> 61x</ span >
499510< span class ="cline-any cline-yes "> 61x</ span >
511+ < span class ="cline-any cline-yes "> 8x</ span >
512+ < span class ="cline-any cline-yes "> 61x</ span >
513+ < span class ="cline-any cline-yes "> 53x</ span >
514+ < span class ="cline-any cline-yes "> 53x</ span >
515+ < span class ="cline-any cline-yes "> 159x</ span >
516+ < span class ="cline-any cline-yes "> 159x</ span >
517+ < span class ="cline-any cline-yes "> 159x</ span >
518+ < span class ="cline-any cline-yes "> 159x</ span >
519+ < span class ="cline-any cline-yes "> 159x</ span >
520+ < span class ="cline-any cline-yes "> 159x</ span >
521+ < span class ="cline-any cline-yes "> 53x</ span >
500522< span class ="cline-any cline-yes "> 61x</ span >
501523< span class ="cline-any cline-yes "> 61x</ span >
502- < span class ="cline-any cline-yes "> 191x</ span >
503- < span class ="cline-any cline-yes "> 191x</ span >
504- < span class ="cline-any cline-yes "> 191x</ span >
505- < span class ="cline-any cline-yes "> 191x</ span >
506- < span class ="cline-any cline-yes "> 191x</ span >
507- < span class ="cline-any cline-yes "> 191x</ span >
508524< span class ="cline-any cline-yes "> 61x</ span >
509525< span class ="cline-any cline-yes "> 25x</ span >
510526< span class ="cline-any cline-yes "> 25x</ span >
511527< span class ="cline-any cline-yes "> 26x</ span >
512528< span class ="cline-any cline-yes "> 26x</ span >
513529< span class ="cline-any cline-yes "> 26x</ span >
514530< span class ="cline-any cline-yes "> 61x</ span >
531+ < span class ="cline-any cline-yes "> 20x</ span >
532+ < span class ="cline-any cline-yes "> 20x</ span >
533+ < span class ="cline-any cline-yes "> 61x</ span >
534+ < span class ="cline-any cline-yes "> 6x</ span >
535+ < span class ="cline-any cline-yes "> 6x</ span >
536+ < span class ="cline-any cline-yes "> 6x</ span >
537+ < span class ="cline-any cline-yes "> 26x</ span >
538+ < span class ="cline-any cline-yes "> 26x</ span >
539+ < span class ="cline-any cline-yes "> 61x</ span >
515540< span class ="cline-any cline-yes "> 86x</ span >
516541< span class ="cline-any cline-yes "> 86x</ span >
517542< span class ="cline-any cline-yes "> 86x</ span >
@@ -528,6 +553,7 @@ <h1><a href="index.html">All files</a> base.js</h1>
528553< span class ="cline-any cline-yes "> 86x</ span >
529554< span class ="cline-any cline-yes "> 86x</ span >
530555< span class ="cline-any cline-yes "> 86x</ span >
556+ < span class ="cline-any cline-yes "> 86x</ span >
531557< span class ="cline-any cline-yes "> 26x</ span >
532558< span class ="cline-any cline-yes "> 61x</ span >
533559< span class ="cline-any cline-yes "> 3x</ span >
@@ -643,9 +669,8 @@ <h1><a href="index.html">All files</a> base.js</h1>
643669 var xlen;
644670 var ylen;
645671 var sign;
646- var sa0;
647- var sa1;
648- var oa2;
672+ var da0;
673+ var da1;
649674 var rea;
650675 var ima;
651676 var rex;
@@ -702,16 +727,6 @@ <h1><a href="index.html">All files</a> base.js</h1>
702727 } else {
703728 sign = 1;
704729 }
705-
706- if ( isrm ) {
707- // For row-major matrices, the last dimension has the fastest changing index...
708- sa0 = strideA2 * 2; // offset increment for innermost loop
709- sa1 = strideA1 * 2; // offset increment for outermost loop
710- } else { // isColMajor
711- // For column-major matrices, the first dimension has the fastest changing index...
712- sa0 = strideA1 * 2; // offset increment for innermost loop
713- sa1 = strideA2 * 2; // offset increment for outermost loop
714- }
715730
716731 // Vector indexing base
717732 oa = offsetA * 2;
@@ -727,42 +742,66 @@ <h1><a href="index.html">All files</a> base.js</h1>
727742 ( !isrm && !isTransposed( trans ) ) ||
728743 ( isrm && isTransposed( trans ) )
729744 ) {
745+ if ( isrm ) {
746+ da0 = strideA2 * 2;
747+ da1 = ( strideA1 * 2 ) - ( ylen * strideA2 * 2 );
748+ } else {
749+ da0 = strideA1 * 2;
750+ da1 = ( strideA2 * 2 ) - ( ylen * strideA1 * 2 );
751+ }
752+ ia = oa;
753+ ix = ox;
730754 for ( i1 = 0; i1 < xlen; i1++ ) {
731- ix = ox + ( i1 * sx );
732- oa2 = oa + ( i1 * sa1 );
733755 rex = viewX[ ix ];
734756 imx = viewX[ ix + 1 ];
735757 retmp = f32( ( realpha * rex ) - ( imalpha * imx ) );
736758 imtmp = f32( ( realpha * imx ) + ( imalpha * rex ) );
737- for ( i0 = 0; i0 < ylen; i0++ ) {
738- ia = oa2 + ( i0 * sa0 );
739- rea = viewA[ ia ];
740- ima = sign * viewA[ ia + 1 ];
741- iy = oy + ( i0 * sy );
742- muladd( rea, ima, retmp, imtmp, viewY[ iy ], viewY[ iy + 1 ], viewY, 1, iy ); // eslint-disable-line max-len
759+ if ( retmp === 0.0 && imtmp === 0.0 ) {
760+ ia += da0 * ylen;
761+ } else {
762+ iy = oy;
763+ for ( i0 = 0; i0 < ylen; i0++ ) {
764+ rea = viewA[ ia ];
765+ ima = sign * viewA[ ia + 1 ];
766+ muladd( rea, ima, retmp, imtmp, viewY[ iy ], viewY[ iy + 1 ], viewY, 1, iy ); // eslint-disable-line max-len
767+ iy += sy;
768+ ia += da0;
769+ }
743770 }
771+ ix += sx;
772+ ia += da1;
744773 }
745774 return y;
746775 }
747776
748777 // Form: y = α*A^T*x + y
749778 // ( !isrm && isTransposed( trans ) ) || ( isrm && !isTransposed( trans ) )
779+ if ( isrm ) {
780+ da0 = strideA2 * 2;
781+ da1 = ( strideA1 * 2 ) - ( xlen * strideA2 * 2 );
782+ } else {
783+ da0 = strideA1 * 2;
784+ da1 = ( strideA2 * 2 ) - ( xlen * strideA1 * 2 );
785+ }
786+ ia = oa;
787+ iy = oy;
750788 for ( i1 = 0; i1 < ylen; i1++ ) {
751- oa2 = oa + ( i1 * sa1 );
752789 retmp = 0.0;
753790 imtmp = 0.0;
791+ ix = ox;
754792 for ( i0 = 0; i0 < xlen; i0++ ) {
755- ia = oa2 + ( i0 * sa0 );
756- ix = ox + ( i0 * sx );
757793 rea = viewA[ ia ];
758794 ima = sign * viewA[ ia + 1 ];
759795 rex = viewX[ ix ];
760796 imx = viewX[ ix + 1 ];
761797 retmp = f32( retmp + f32( ( rea * rex ) - ( ima * imx ) ) );
762798 imtmp = f32( imtmp + f32( ( rea * imx ) + ( ima * rex ) ) );
799+ ix += sx;
800+ ia += da0;
763801 }
764- iy = oy + ( i1 * sy );
765802 muladd( realpha, imalpha, retmp, imtmp, viewY[ iy ], viewY[ iy + 1 ], viewY, 1, iy ); // eslint-disable-line max-len
803+ iy += sy;
804+ ia += da1;
766805 }
767806 return y;
768807}
@@ -778,7 +817,7 @@ <h1><a href="index.html">All files</a> base.js</h1>
778817 < div class ='footer quiet pad2 space-top1 center small '>
779818 Code coverage generated by
780819 < a href ="https://istanbul.js.org/ " target ="_blank " rel ="noopener noreferrer "> istanbul</ a >
781- at 2026-04-15T06:02:03.824Z
820+ at 2026-04-15T08:40:48.152Z
782821 </ div >
783822 < script src ="prettify.js "> </ script >
784823 < script >
0 commit comments