'use strict';

// MAIN //

/**
* Computes an absolute value of a signed 32-bit integer in two's complement format.
*
* ## Method
*
* * Assume two's complement format.
* * Create a mask by applying a sign propagating right-shift. For negative integers, this results in all `1`'s. For nonnegative integers, this results in all `0`'s.
* * XOR the mask with `x`. For negative integers, this is the equivalent of a NOT. For nonnegative integers, this is a no-op.
* * Subtract the mask to recover the absolute value. For negative integers, this adds `1`, which is `-x` when using two's complement. For nonnegative integers, this subtracts `0`.
*
* @private
* @param {integer32} x - integer
* @returns {integer32} absolute value
*
* @example
* var v = abs( -10|0 );
* // returns 10
*/
function abs( x ) {
	var y = x|0; // asm type annotation
	var mask = ( y >> 31 )|0; // asm type annotation
	return ((y ^ mask) - mask)|0; // asm type annotation
} // end FUNCTION abs()


// EXPORTS //

module.exports = abs;

'use strict';

// MAIN //

/**
* Computes an absolute value of a signed 32-bit integer in two's complement format.
*
* ## Method
*
* * Assume two's complement format.
* * Create a mask by applying a sign propagating right-shift. For negative integers, this results in all `1`'s. For nonnegative integers, this results in all `0`'s.
* * XOR the mask with `x`. For negative integers, this is the equivalent of a NOT. For nonnegative integers, this is a no-op.
* * Subtract the mask to recover the absolute value. For negative integers, this adds `1`, which is `-x` when using two's complement. For nonnegative integers, this subtracts `0`.
*
* @param {integer32} x - integer
* @returns {integer32} absolute value
*
* @example
* var v = abs( -10|0 );
* // returns 10
*/
function abs( x ) {
	var y = x|0; // asm type annotation
	var mask = ( y >> 31 )|0; // asm type annotation
	return ((y ^ mask) - mask)|0; // asm type annotation
} // end FUNCTION abs()


// EXPORTS //

module.exports = abs;

Remove private annotation