code: func (e *gfP2) Mul(a, b *gfP2, pool *bnPool) *gfP2 {
  	tx := pool.Get().Mul(a.x, b.y)
  	t := pool.Get().Mul(b.x, a.y)
  	tx.Add(tx, t)
  	tx.Mod(tx, P)
  
  	ty := pool.Get().Mul(a.y, b.y)
  	t.Mul(a.x, b.x)
  	ty.Sub(ty, t)
  	e.y.Mod(ty, P)
  	e.x.Set(tx)
  
  	pool.Put(tx)
  	pool.Put(ty)
  	pool.Put(t)
  
  	return e
  }
docs: // See "Multiplication and Squaring in Pairing-Friendly Fields",
  // http://eprint.iacr.org/2006/471.pdf