src/bigi/lib/bigi.js
function am2(i, x, w, j, c, n) {
  var xl = x & 0x7fff,
    xh = x >> 15
  while (--n >= 0) {
    var l = this[i] & 0x7fff
    var h = this[i++] >> 15
    var m = xh * l + h * xl
    l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff)
    c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30)
    w[j++] = l & 0x3fffffff
  }
  return c
}
function am2(i, x, w, j, c, n) {
  var xl = x & 0x7fff,
    xh = x >> 15
  while (--n >= 0) {
    var l = this[i] & 0x7fff
    var h = this[i++] >> 15
    var m = xh * l + h * xl
    l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff)
    c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30)
    w[j++] = l & 0x3fffffff
  }
  return c
}
function am2 ( i , x , w , j , c , n ) { var xl = x & 0x7fff , xh = x >> 15 while ( -- n >= 0 ) { var l = this [ i ] & 0x7fff var h = this [ i ++ ] >> 15 var m = xh * l + h * xl l = xl * l + ( ( m & 0x7fff ) << 15 ) + w [ j ] + ( c & 0x3fffffff ) c = ( l >>> 30 ) + ( m >>> 15 ) + xh * h + ( c >>> 30 ) w [ j ++ ] = l & 0x3fffffff } return c }
am2 avoids a big mult-and-extract completely. Max digit bits should be <= 30 because we do bitwise ops on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
am2 avoids a big mult - and - extract completely . Max digit bits should be < = 30 because we do bitwise ops on values up to 2 * hdvalue^2 - hdvalue - 1 ( < 2^31 )