#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 r8591 = x_re;
        float r8592 = y_re;
        float r8593 = r8591 * r8592;
        float r8594 = x_im;
        float r8595 = y_im;
        float r8596 = r8594 * r8595;
        float r8597 = r8593 - r8596;
        return r8597;
}

double f_id(double x_re, double x_im, double y_re, double y_im) {
        double r8598 = x_re;
        double r8599 = y_re;
        double r8600 = r8598 * r8599;
        double r8601 = x_im;
        double r8602 = y_im;
        double r8603 = r8601 * r8602;
        double r8604 = r8600 - r8603;
        return r8604;
}


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

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

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 r8627, r8628, r8629, r8630, r8631, r8632, r8633;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r8627);
        mpfr_init(r8628);
        mpfr_init(r8629);
        mpfr_init(r8630);
        mpfr_init(r8631);
        mpfr_init(r8632);
        mpfr_init(r8633);
}

double f_im(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r8627, x_re, MPFR_RNDN);
        mpfr_set_d(r8628, y_re, MPFR_RNDN);
        mpfr_mul(r8629, r8627, r8628, MPFR_RNDN);
        mpfr_set_d(r8630, x_im, MPFR_RNDN);
        mpfr_set_d(r8631, y_im, MPFR_RNDN);
        mpfr_mul(r8632, r8630, r8631, MPFR_RNDN);
        mpfr_sub(r8633, r8629, r8632, MPFR_RNDN);
        return mpfr_get_d(r8633, MPFR_RNDN);
}

static mpfr_t r8634, r8635, r8636, r8637, r8638, r8639, r8640, r8641, r8642, r8643, r8644;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r8634);
        mpfr_init(r8635);
        mpfr_init(r8636);
        mpfr_init(r8637);
        mpfr_init(r8638);
        mpfr_init(r8639);
        mpfr_init(r8640);
        mpfr_init(r8641);
        mpfr_init(r8642);
        mpfr_init(r8643);
        mpfr_init(r8644);
}

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

static mpfr_t r8645, r8646, r8647, r8648, r8649, r8650, r8651, r8652, r8653, r8654, r8655;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r8645);
        mpfr_init(r8646);
        mpfr_init(r8647);
        mpfr_init(r8648);
        mpfr_init(r8649);
        mpfr_init(r8650);
        mpfr_init(r8651);
        mpfr_init(r8652);
        mpfr_init(r8653);
        mpfr_init(r8654);
        mpfr_init(r8655);
}

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

