20
20
21
21
// MODULES //
22
22
23
+ var max = require ( '@stdlib/math/base/special/fast/max' ) ;
23
24
var stride2offset = require ( '@stdlib/strided/base/stride2offset' ) ;
24
25
var isLayout = require ( '@stdlib/blas/base/assert/is-layout' ) ;
25
26
var isMatrixTranspose = require ( '@stdlib/blas/base/assert/is-transpose-operation' ) ;
@@ -65,13 +66,16 @@ var base = require( './base.js' );
65
66
* // y => <Float64Array>[ 7.0, 16.0 ]
66
67
*/
67
68
function dgemv ( order , trans , M , N , alpha , A , LDA , x , strideX , beta , y , strideY ) { // eslint-disable-line max-params, max-len
69
+ var iscm ;
70
+ var vala ;
68
71
var xlen ;
69
72
var ylen ;
70
73
var sa1 ;
71
74
var sa2 ;
72
75
var ox ;
73
76
var oy ;
74
77
78
+ iscm = isColumnMajor ( order ) ;
75
79
if ( ! isLayout ( order ) ) {
76
80
throw new TypeError ( format ( 'invalid argument. First argument must be a valid order. Value: `%s`.' , order ) ) ;
77
81
}
@@ -84,6 +88,14 @@ function dgemv( order, trans, M, N, alpha, A, LDA, x, strideX, beta, y, strideY
84
88
if ( N < 0 ) {
85
89
throw new RangeError ( format ( 'invalid argument. Fourth argument must be a nonnegative integer. Value: `%d`.' , N ) ) ;
86
90
}
91
+ if ( iscm ) {
92
+ vala = M ;
93
+ } else {
94
+ vala = N ;
95
+ }
96
+ if ( LDA < max ( 1 , vala ) ) {
97
+ throw new RangeError ( format ( 'invalid argument. Seventh argument must be greater than or equal to max(1,%d). Value: `%d`.' , vala , LDA ) ) ;
98
+ }
87
99
if ( strideX === 0 ) {
88
100
throw new RangeError ( format ( 'invalid argument. Ninth argument must be non-zero.' ) ) ;
89
101
}
@@ -103,7 +115,7 @@ function dgemv( order, trans, M, N, alpha, A, LDA, x, strideX, beta, y, strideY
103
115
}
104
116
ox = stride2offset ( xlen , strideX ) ;
105
117
oy = stride2offset ( ylen , strideY ) ;
106
- if ( isColumnMajor ( order ) ) {
118
+ if ( iscm ) {
107
119
sa1 = 1 ;
108
120
sa2 = LDA ;
109
121
} else { // order === 'row-major'
0 commit comments