docs: function ecp_dbl(R, N, a, p, l) {
  	var x = N[0], y = N[1], z = N[2];
  	var xr = R[0], yr = R[1], zr = R[2];
  	if (mpn_zero_p(z, l)) {
  		mpn_zero(xr, l), mpn_zero(yr, l), mpn_zero(zr, l);
  		return R;
  	}
  	var t0 = _ecp_t0, t1 = _ecp_t1, t2 = _ecp_t2, t3 = _ecp_t3;
  	fp_add(t0, t0, fp_dbl(t1, fp_sqr(t0, x, p, l), p, l), p, l);
  	if (!mpn_zero_p(a, l)) {
  		fp_add(t0, t0, fp_mul(t1, a, fp_sqr(t2, fp_sqr(t1, z, p, l), p, l), p, l), p, l);
  	}
  	fp_dbl(t1, fp_sqr(t1, y, p, l), p, l);
  	fp_dbl(t2, fp_mul(t2, x, t1, p, l), p, l);
  	fp_dbl(t3, fp_sqr(t3, t1, p, l), p, l);
  	fp_sub(xr, fp_sqr(xr, t0, p, l), fp_dbl(t1, t2, p, l), p, l);
  	fp_sub(yr, fp_mul(yr, t0, fp_sub(t1, t2, xr, p, l), p, l), t3, p, l);
  	fp_dbl(zr, fp_mul(zr, y, z, p, l), p, l);
  	return R;
  }