/* Automatically generated by ext/gen_interpreters.py.  Do not edit! */
#include "interp_rr.h"

int interp_rr(mpfr_t* args,
        mpfr_t* retval,
        mpfr_t* constants,
        PyObject** py_constants,
        mpfr_t* stack,
        int* code,
        PyObject* domain) {
  while (1) {
    switch (*code++) {
    case 0: /* load_arg */
      {
        int ai0 = *code++;
        mpfr_ptr i0 = args[ai0];
        mpfr_ptr o0 = *stack++;
        mpfr_set(o0, i0, GMP_RNDN);
      }
      break;
    case 1: /* load_const */
      {
        int ai0 = *code++;
        mpfr_ptr i0 = constants[ai0];
        mpfr_ptr o0 = *stack++;
        mpfr_set(o0, i0, GMP_RNDN);
      }
      break;
    case 2: /* return */
      {
        mpfr_ptr i0 = *--stack;
        mpfr_set(retval[0], i0, GMP_RNDN);
        return 1;
      }
      break;
    case 3: /* py_call */
      {
        int ai0 = *code++;
        PyObject* i0 = py_constants[ai0];
        int n_i1 = *code++;
        stack -= n_i1;
        mpfr_t* i1 = stack;
        mpfr_ptr o0 = *stack++;
        
        if (!rr_py_call_helper(domain, i0, n_i1, i1, o0)) {
          goto error;
        }
      }
      break;
    case 4: /* add */
      {
        mpfr_ptr i1 = *--stack;
        mpfr_ptr i0 = *--stack;
        mpfr_ptr o0 = *stack++;
        mpfr_add(o0, i0, i1, GMP_RNDN);
      }
      break;
    case 5: /* sub */
      {
        mpfr_ptr i1 = *--stack;
        mpfr_ptr i0 = *--stack;
        mpfr_ptr o0 = *stack++;
        mpfr_sub(o0, i0, i1, GMP_RNDN);
      }
      break;
    case 6: /* mul */
      {
        mpfr_ptr i1 = *--stack;
        mpfr_ptr i0 = *--stack;
        mpfr_ptr o0 = *stack++;
        mpfr_mul(o0, i0, i1, GMP_RNDN);
      }
      break;
    case 7: /* div */
      {
        mpfr_ptr i1 = *--stack;
        mpfr_ptr i0 = *--stack;
        mpfr_ptr o0 = *stack++;
        mpfr_div(o0, i0, i1, GMP_RNDN);
      }
      break;
    case 8: /* pow */
      {
        mpfr_ptr i1 = *--stack;
        mpfr_ptr i0 = *--stack;
        mpfr_ptr o0 = *stack++;
        mpfr_pow(o0, i0, i1, GMP_RNDN);
      }
      break;
    case 9: /* ipow */
      {
        int i1 = *code++;
        mpfr_ptr i0 = *--stack;
        mpfr_ptr o0 = *stack++;
        mpfr_pow_si(o0, i0, i1, GMP_RNDN);
      }
      break;
    case 10: /* neg */
      {
        mpfr_ptr i0 = *--stack;
        mpfr_ptr o0 = *stack++;
        mpfr_neg(o0, i0, GMP_RNDN);
      }
      break;
    case 11: /* abs */
      {
        mpfr_ptr i0 = *--stack;
        mpfr_ptr o0 = *stack++;
        mpfr_abs(o0, i0, GMP_RNDN);
      }
      break;
    case 12: /* log */
      {
        mpfr_ptr i0 = *--stack;
        mpfr_ptr o0 = *stack++;
        mpfr_log(o0, i0, GMP_RNDN);
      }
      break;
    case 13: /* log2 */
      {
        mpfr_ptr i0 = *--stack;
        mpfr_ptr o0 = *stack++;
        mpfr_log2(o0, i0, GMP_RNDN);
      }
      break;
    case 14: /* log10 */
      {
        mpfr_ptr i0 = *--stack;
        mpfr_ptr o0 = *stack++;
        mpfr_log10(o0, i0, GMP_RNDN);
      }
      break;
    case 15: /* exp */
      {
        mpfr_ptr i0 = *--stack;
        mpfr_ptr o0 = *stack++;
        mpfr_exp(o0, i0, GMP_RNDN);
      }
      break;
    case 16: /* exp2 */
      {
        mpfr_ptr i0 = *--stack;
        mpfr_ptr o0 = *stack++;
        mpfr_exp2(o0, i0, GMP_RNDN);
      }
      break;
    case 17: /* exp10 */
      {
        mpfr_ptr i0 = *--stack;
        mpfr_ptr o0 = *stack++;
        mpfr_exp10(o0, i0, GMP_RNDN);
      }
      break;
    case 18: /* cos */
      {
        mpfr_ptr i0 = *--stack;
        mpfr_ptr o0 = *stack++;
        mpfr_cos(o0, i0, GMP_RNDN);
      }
      break;
    case 19: /* sin */
      {
        mpfr_ptr i0 = *--stack;
        mpfr_ptr o0 = *stack++;
        mpfr_sin(o0, i0, GMP_RNDN);
      }
      break;
    case 20: /* tan */
      {
        mpfr_ptr i0 = *--stack;
        mpfr_ptr o0 = *stack++;
        mpfr_tan(o0, i0, GMP_RNDN);
      }
      break;
    case 21: /* sec */
      {
        mpfr_ptr i0 = *--stack;
        mpfr_ptr o0 = *stack++;
        mpfr_sec(o0, i0, GMP_RNDN);
      }
      break;
    case 22: /* csc */
      {
        mpfr_ptr i0 = *--stack;
        mpfr_ptr o0 = *stack++;
        mpfr_csc(o0, i0, GMP_RNDN);
      }
      break;
    case 23: /* cot */
      {
        mpfr_ptr i0 = *--stack;
        mpfr_ptr o0 = *stack++;
        mpfr_cot(o0, i0, GMP_RNDN);
      }
      break;
    case 24: /* acos */
      {
        mpfr_ptr i0 = *--stack;
        mpfr_ptr o0 = *stack++;
        mpfr_acos(o0, i0, GMP_RNDN);
      }
      break;
    case 25: /* asin */
      {
        mpfr_ptr i0 = *--stack;
        mpfr_ptr o0 = *stack++;
        mpfr_asin(o0, i0, GMP_RNDN);
      }
      break;
    case 26: /* atan */
      {
        mpfr_ptr i0 = *--stack;
        mpfr_ptr o0 = *stack++;
        mpfr_atan(o0, i0, GMP_RNDN);
      }
      break;
    case 27: /* cosh */
      {
        mpfr_ptr i0 = *--stack;
        mpfr_ptr o0 = *stack++;
        mpfr_cosh(o0, i0, GMP_RNDN);
      }
      break;
    case 28: /* sinh */
      {
        mpfr_ptr i0 = *--stack;
        mpfr_ptr o0 = *stack++;
        mpfr_sinh(o0, i0, GMP_RNDN);
      }
      break;
    case 29: /* tanh */
      {
        mpfr_ptr i0 = *--stack;
        mpfr_ptr o0 = *stack++;
        mpfr_tanh(o0, i0, GMP_RNDN);
      }
      break;
    case 30: /* sech */
      {
        mpfr_ptr i0 = *--stack;
        mpfr_ptr o0 = *stack++;
        mpfr_sech(o0, i0, GMP_RNDN);
      }
      break;
    case 31: /* csch */
      {
        mpfr_ptr i0 = *--stack;
        mpfr_ptr o0 = *stack++;
        mpfr_csch(o0, i0, GMP_RNDN);
      }
      break;
    case 32: /* coth */
      {
        mpfr_ptr i0 = *--stack;
        mpfr_ptr o0 = *stack++;
        mpfr_coth(o0, i0, GMP_RNDN);
      }
      break;
    case 33: /* acosh */
      {
        mpfr_ptr i0 = *--stack;
        mpfr_ptr o0 = *stack++;
        mpfr_acosh(o0, i0, GMP_RNDN);
      }
      break;
    case 34: /* asinh */
      {
        mpfr_ptr i0 = *--stack;
        mpfr_ptr o0 = *stack++;
        mpfr_asinh(o0, i0, GMP_RNDN);
      }
      break;
    case 35: /* atanh */
      {
        mpfr_ptr i0 = *--stack;
        mpfr_ptr o0 = *stack++;
        mpfr_atanh(o0, i0, GMP_RNDN);
      }
      break;
    case 36: /* log1p */
      {
        mpfr_ptr i0 = *--stack;
        mpfr_ptr o0 = *stack++;
        mpfr_log1p(o0, i0, GMP_RNDN);
      }
      break;
    case 37: /* expm1 */
      {
        mpfr_ptr i0 = *--stack;
        mpfr_ptr o0 = *stack++;
        mpfr_expm1(o0, i0, GMP_RNDN);
      }
      break;
    case 38: /* eint */
      {
        mpfr_ptr i0 = *--stack;
        mpfr_ptr o0 = *stack++;
        mpfr_eint(o0, i0, GMP_RNDN);
      }
      break;
    case 39: /* gamma */
      {
        mpfr_ptr i0 = *--stack;
        mpfr_ptr o0 = *stack++;
        mpfr_gamma(o0, i0, GMP_RNDN);
      }
      break;
    case 40: /* lngamma */
      {
        mpfr_ptr i0 = *--stack;
        mpfr_ptr o0 = *stack++;
        mpfr_lngamma(o0, i0, GMP_RNDN);
      }
      break;
    case 41: /* zeta */
      {
        mpfr_ptr i0 = *--stack;
        mpfr_ptr o0 = *stack++;
        mpfr_zeta(o0, i0, GMP_RNDN);
      }
      break;
    case 42: /* erf */
      {
        mpfr_ptr i0 = *--stack;
        mpfr_ptr o0 = *stack++;
        mpfr_erf(o0, i0, GMP_RNDN);
      }
      break;
    case 43: /* erfc */
      {
        mpfr_ptr i0 = *--stack;
        mpfr_ptr o0 = *stack++;
        mpfr_erfc(o0, i0, GMP_RNDN);
      }
      break;
    case 44: /* j0 */
      {
        mpfr_ptr i0 = *--stack;
        mpfr_ptr o0 = *stack++;
        mpfr_j0(o0, i0, GMP_RNDN);
      }
      break;
    case 45: /* j1 */
      {
        mpfr_ptr i0 = *--stack;
        mpfr_ptr o0 = *stack++;
        mpfr_j1(o0, i0, GMP_RNDN);
      }
      break;
    case 46: /* y0 */
      {
        mpfr_ptr i0 = *--stack;
        mpfr_ptr o0 = *stack++;
        mpfr_y0(o0, i0, GMP_RNDN);
      }
      break;
    case 47: /* y1 */
      {
        mpfr_ptr i0 = *--stack;
        mpfr_ptr o0 = *stack++;
        mpfr_y1(o0, i0, GMP_RNDN);
      }
      break;
    case 48: /* invert */
      {
        mpfr_ptr i0 = *--stack;
        mpfr_ptr o0 = *stack++;
        mpfr_ui_div(o0, 1, i0, GMP_RNDN);
      }
      break;
    }
  }
error:
  return 0;
}

