result
0230210c23b1a047bc9bdbb13448e67deddc108946de6de639bcc75d47c0216b1b

Check each function separately. Starting with void point_add().
Missing intermediate variables.
mpz_t imod;
mpz_t l;
mpz_t lsq;
mpz_t lsq2;
mpz_t lsq3;
mpz_t mul;
mpz_t x3;
mpz_t xmx3;
mpz_t xsub;
mpz_t ymul;
mpz_t ys;
mpz_t ysub;
Should the results be stored in temporary variables?
For example:
mpz_sub(ysub, other.m_y, m_y);
mpz_sub(xsub, other.m_x, m_x);
mpz_invert(imod, xsub, m_curve.m_p);
mpz_mul(mul, ysub, imod);
mpz_mod(l, mul, m_curve.m_p);
mpz_pow_ui(lsq, l, 2);
mpz_sub(lsq2, lsq, m_x);
mpz_sub(lsq3, lsq2, other.m_x);
mpz_mod(x3, lsq3, m_curve.m_p);
mpz_sub(xmx3, m_x, x3);
mpz_mul(ymul, l, xmx3);
mpz_sub(ys, ymul, m_y);
mpz_mod(m_y, ys, m_curve.m_p);
mpz_set(m_x, x3);
mpz_set_ui(m_o, 0);