function mul( x, y ) {
	// Cast `x` and `y` to signed 32-bit integers and apply a mask which keeps only the lowest 16 bits:
	return imul( x|0, y|0 ) & MASK; // 65535^2 = 42949365225, which overflows signed 32-bit integer; however, by using `imul`, we emulate C-like two's complement wraparound semantics, which allows us to just keep the last 16-bits
}
Multiplies two unsigned 16-bit integers `x` and `y`.

@param {integer} x - first input value
@param {integer} y - second input value
@returns {integer} result

@example
var v = mul( 5, 1 );
// returns 5

@example
var v = mul( 5, 2 );
// returns 10

@example
var v = mul( 5, 0 );
// returns 0