#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "_multiplyComplex, real part";

double f_if(float x_re, float x_im, float y_re, float y_im) {
        float r8594 = x_re;
        float r8595 = y_re;
        float r8596 = r8594 * r8595;
        float r8597 = x_im;
        float r8598 = y_im;
        float r8599 = r8597 * r8598;
        float r8600 = r8596 - r8599;
        return r8600;
}

double f_id(double x_re, double x_im, double y_re, double y_im) {
        double r8601 = x_re;
        double r8602 = y_re;
        double r8603 = r8601 * r8602;
        double r8604 = x_im;
        double r8605 = y_im;
        double r8606 = r8604 * r8605;
        double r8607 = r8603 - r8606;
        return r8607;
}


double f_of(float x_re, float x_im, float y_re, float y_im) {
        float r8608 = y_im;
        float r8609 = -r8608;
        float r8610 = x_im;
        float r8611 = r8608 * r8610;
        float r8612 = fma(r8609, r8610, r8611);
        float r8613 = x_re;
        float r8614 = y_re;
        float r8615 = -r8610;
        float r8616 = r8615 * r8608;
        float r8617 = fma(r8613, r8614, r8616);
        float r8618 = r8612 + r8617;
        return r8618;
}

double f_od(double x_re, double x_im, double y_re, double y_im) {
        double r8619 = y_im;
        double r8620 = -r8619;
        double r8621 = x_im;
        double r8622 = r8619 * r8621;
        double r8623 = fma(r8620, r8621, r8622);
        double r8624 = x_re;
        double r8625 = y_re;
        double r8626 = -r8621;
        double r8627 = r8626 * r8619;
        double r8628 = fma(r8624, r8625, r8627);
        double r8629 = r8623 + r8628;
        return r8629;
}

void mpfr_fmod2(mpfr_t r, mpfr_t n, mpfr_t d, mpfr_rnd_t rmd) {
        mpfr_fmod(r, n, d, rmd);
        if (mpfr_cmp_ui(r, 0) < 0) mpfr_add(r, r, d, rmd);
}


static mpfr_t r8630, r8631, r8632, r8633, r8634, r8635, r8636;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r8630);
        mpfr_init(r8631);
        mpfr_init(r8632);
        mpfr_init(r8633);
        mpfr_init(r8634);
        mpfr_init(r8635);
        mpfr_init(r8636);
}

double f_im(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r8630, x_re, MPFR_RNDN);
        mpfr_set_d(r8631, y_re, MPFR_RNDN);
        mpfr_mul(r8632, r8630, r8631, MPFR_RNDN);
        mpfr_set_d(r8633, x_im, MPFR_RNDN);
        mpfr_set_d(r8634, y_im, MPFR_RNDN);
        mpfr_mul(r8635, r8633, r8634, MPFR_RNDN);
        mpfr_sub(r8636, r8632, r8635, MPFR_RNDN);
        return mpfr_get_d(r8636, MPFR_RNDN);
}

static mpfr_t r8637, r8638, r8639, r8640, r8641, r8642, r8643, r8644, r8645, r8646, r8647;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r8637);
        mpfr_init(r8638);
        mpfr_init(r8639);
        mpfr_init(r8640);
        mpfr_init(r8641);
        mpfr_init(r8642);
        mpfr_init(r8643);
        mpfr_init(r8644);
        mpfr_init(r8645);
        mpfr_init(r8646);
        mpfr_init(r8647);
}

double f_fm(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r8637, y_im, MPFR_RNDN);
        mpfr_neg(r8638, r8637, MPFR_RNDN);
        mpfr_set_d(r8639, x_im, MPFR_RNDN);
        mpfr_mul(r8640, r8637, r8639, MPFR_RNDN);
        mpfr_fma(r8641, r8638, r8639, r8640, MPFR_RNDN);
        mpfr_set_d(r8642, x_re, MPFR_RNDN);
        mpfr_set_d(r8643, y_re, MPFR_RNDN);
        mpfr_neg(r8644, r8639, MPFR_RNDN);
        mpfr_mul(r8645, r8644, r8637, MPFR_RNDN);
        mpfr_fma(r8646, r8642, r8643, r8645, MPFR_RNDN);
        mpfr_add(r8647, r8641, r8646, MPFR_RNDN);
        return mpfr_get_d(r8647, MPFR_RNDN);
}

static mpfr_t r8648, r8649, r8650, r8651, r8652, r8653, r8654, r8655, r8656, r8657, r8658;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r8648);
        mpfr_init(r8649);
        mpfr_init(r8650);
        mpfr_init(r8651);
        mpfr_init(r8652);
        mpfr_init(r8653);
        mpfr_init(r8654);
        mpfr_init(r8655);
        mpfr_init(r8656);
        mpfr_init(r8657);
        mpfr_init(r8658);
}

double f_dm(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r8648, y_im, MPFR_RNDN);
        mpfr_neg(r8649, r8648, MPFR_RNDN);
        mpfr_set_d(r8650, x_im, MPFR_RNDN);
        mpfr_mul(r8651, r8648, r8650, MPFR_RNDN);
        mpfr_fma(r8652, r8649, r8650, r8651, MPFR_RNDN);
        mpfr_set_d(r8653, x_re, MPFR_RNDN);
        mpfr_set_d(r8654, y_re, MPFR_RNDN);
        mpfr_neg(r8655, r8650, MPFR_RNDN);
        mpfr_mul(r8656, r8655, r8648, MPFR_RNDN);
        mpfr_fma(r8657, r8653, r8654, r8656, MPFR_RNDN);
        mpfr_add(r8658, r8652, r8657, MPFR_RNDN);
        return mpfr_get_d(r8658, MPFR_RNDN);
}

