Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
// MODULES //

var bench = require( '@stdlib/bench' );
var minstd = require( '@stdlib/random/base/minstd' );
var discreteUniform = require( '@stdlib/random/array/discrete-uniform' );
var isnan = require( '@stdlib/math/base/assert/is-nan' );
var format = require( '@stdlib/string/format' );
var pkg = require( './../package.json' ).name;
Expand All @@ -33,12 +33,17 @@ var imuldw = require( './../lib' );
bench( pkg, function benchmark( b ) {
var x;
var y;
var z;
var i;

x = discreteUniform( 100, 0x10000, 0x10000000, {
'dtype': 'int32'
});

b.tic();
for ( i = 0; i < b.iterations; i++ ) {
x = minstd();
y = imuldw( x, x );
z = x[ i%x.length ];
y = imuldw( z, z );
if ( isnan( y[ 0 ] ) ) {
b.fail( 'should not return NaN' );
}
Expand All @@ -55,14 +60,19 @@ bench( format( '%s:assign', pkg ), function benchmark( b ) {
var out;
var x;
var y;
var z;
var i;

x = discreteUniform( 100, 0x10000, 0x10000000, {
'dtype': 'int32'
});

out = [ 0.0, 0.0 ];

b.tic();
for ( i = 0; i < b.iterations; i++ ) {
x = minstd();
y = imuldw.assign( x, x, out, 1, 0 );
z = x[ i%x.length ];
y = imuldw.assign( z, z, out, 1, 0 );
if ( isnan( y[ 0 ] ) ) {
b.fail( 'should not return NaN' );
}
Expand Down
11 changes: 2 additions & 9 deletions lib/node_modules/@stdlib/number/int32/base/muldw/lib/assign.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@

// MODULES //

var isnan = require( '@stdlib/math/base/assert/is-nan' );
var imul = require( '@stdlib/number/int32/base/mul' );


// VARIABLES //
Expand Down Expand Up @@ -48,19 +48,13 @@ var LOW_WORD_MASK = 0x0000ffff>>>0; // asm type annotation
function imuldw( a, b, out, stride, offset ) {
var w1;
var w2;
var w3;
var ha;
var hb;
var la;
var lb;
var t;
var k;

if ( isnan( a ) || isnan( b ) ) {
out[ offset ] = NaN;
out[ offset + stride ] = NaN;
return out;
}
a |= 0; // asm type annotation
b |= 0; // asm type annotation

Expand All @@ -71,7 +65,6 @@ function imuldw( a, b, out, stride, offset ) {
lb = ( b & LOW_WORD_MASK ) >>> 0;

t = ( la*lb ) >>> 0;
w3 = ( t & LOW_WORD_MASK ) >>> 0;
k = ( t >>> 16 ) >>> 0;

t = ( ( ha*lb ) + k ) >>> 0;
Expand All @@ -82,7 +75,7 @@ function imuldw( a, b, out, stride, offset ) {
k = ( t >> 16 ) >>> 0;

out[ offset ] = ( ( ha*hb ) + w1 + k ) | 0; // compute the higher 32 bits and cast to a signed 32-bit integer
out[ offset + stride ] = ( ( t << 16 ) + w3 ) | 0; // compute the lower 32 bits and cast to a signed 32-bit integer
out[ offset + stride ] = imul( a, b ) | 0; // compute the lower 32 bits and cast to a signed 32-bit integer
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same general questions as #11702


return out;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@
// MODULES //

var tape = require( 'tape' );
var isnan = require( '@stdlib/math/base/assert/is-nan' );
var Float64Array = require( '@stdlib/array/float64' );
var imuldw = require( './../lib/assign.js' );

Expand All @@ -39,31 +38,6 @@ tape( 'main export is a function', function test( t ) {
t.end();
});

tape( 'the function returns `NaN` if provided `NaN`', function test( t ) {
var out;
var v;

out = [ 0, 0 ];
v = imuldw( NaN, 1, out, 1, 0 );
t.strictEqual( v, out, 'returns output array' );
t.strictEqual( isnan( v[0] ), true, 'returns expected value' );
t.strictEqual( isnan( v[1] ), true, 'returns expected value' );

out = [ 0, 0 ];
v = imuldw( 1, NaN, out, 1, 0 );
t.strictEqual( v, out, 'returns output array' );
t.strictEqual( isnan( v[0] ), true, 'returns expected value' );
t.strictEqual( isnan( v[1] ), true, 'returns expected value' );

out = [ 0, 0 ];
v = imuldw( NaN, NaN, out, 1, 0 );
t.strictEqual( v, out, 'returns output array' );
t.strictEqual( isnan( v[0] ), true, 'returns expected value' );
t.strictEqual( isnan( v[1] ), true, 'returns expected value' );

t.end();
});

tape( 'the function computes the double word product of two (signed) words', function test( t ) {
var expected;
var actual;
Expand Down
19 changes: 0 additions & 19 deletions lib/node_modules/@stdlib/number/int32/base/muldw/test/test.main.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@
// MODULES //

var tape = require( 'tape' );
var isnan = require( '@stdlib/math/base/assert/is-nan' );
var imuldw = require( './../lib/main.js' );


Expand All @@ -38,24 +37,6 @@ tape( 'main export is a function', function test( t ) {
t.end();
});

tape( 'the function returns `NaN` if provided `NaN`', function test( t ) {
var v;

v = imuldw( NaN, 1 );
t.strictEqual( isnan( v[0] ), true, 'returns expected value' );
t.strictEqual( isnan( v[1] ), true, 'returns expected value' );

v = imuldw( 1, NaN );
t.strictEqual( isnan( v[0] ), true, 'returns expected value' );
t.strictEqual( isnan( v[1] ), true, 'returns expected value' );

v = imuldw( NaN, NaN );
t.strictEqual( isnan( v[0] ), true, 'returns expected value' );
t.strictEqual( isnan( v[1] ), true, 'returns expected value' );

t.end();
});

tape( 'the function computes the double word product of two (signed) words', function test( t ) {
var expected;
var actual;
Expand Down