use square instead of mul(x, y, y)