#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 r9084 = x_re;
        float r9085 = y_re;
        float r9086 = r9084 * r9085;
        float r9087 = x_im;
        float r9088 = y_im;
        float r9089 = r9087 * r9088;
        float r9090 = r9086 - r9089;
        return r9090;
}

double f_id(double x_re, double x_im, double y_re, double y_im) {
        double r9091 = x_re;
        double r9092 = y_re;
        double r9093 = r9091 * r9092;
        double r9094 = x_im;
        double r9095 = y_im;
        double r9096 = r9094 * r9095;
        double r9097 = r9093 - r9096;
        return r9097;
}


double f_of(float x_re, float x_im, float y_re, float y_im) {
        float r9098 = x_re;
        float r9099 = y_re;
        float r9100 = y_im;
        float r9101 = x_im;
        float r9102 = r9100 * r9101;
        float r9103 = -r9102;
        float r9104 = fma(r9098, r9099, r9103);
        float r9105 = -r9100;
        float r9106 = fma(r9105, r9101, r9102);
        float r9107 = r9104 + r9106;
        return r9107;
}

double f_od(double x_re, double x_im, double y_re, double y_im) {
        double r9108 = x_re;
        double r9109 = y_re;
        double r9110 = y_im;
        double r9111 = x_im;
        double r9112 = r9110 * r9111;
        double r9113 = -r9112;
        double r9114 = fma(r9108, r9109, r9113);
        double r9115 = -r9110;
        double r9116 = fma(r9115, r9111, r9112);
        double r9117 = r9114 + r9116;
        return r9117;
}

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 r9118, r9119, r9120, r9121, r9122, r9123, r9124;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r9118);
        mpfr_init(r9119);
        mpfr_init(r9120);
        mpfr_init(r9121);
        mpfr_init(r9122);
        mpfr_init(r9123);
        mpfr_init(r9124);
}

double f_im(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r9118, x_re, MPFR_RNDN);
        mpfr_set_d(r9119, y_re, MPFR_RNDN);
        mpfr_mul(r9120, r9118, r9119, MPFR_RNDN);
        mpfr_set_d(r9121, x_im, MPFR_RNDN);
        mpfr_set_d(r9122, y_im, MPFR_RNDN);
        mpfr_mul(r9123, r9121, r9122, MPFR_RNDN);
        mpfr_sub(r9124, r9120, r9123, MPFR_RNDN);
        return mpfr_get_d(r9124, MPFR_RNDN);
}

static mpfr_t r9125, r9126, r9127, r9128, r9129, r9130, r9131, r9132, r9133, r9134;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r9125);
        mpfr_init(r9126);
        mpfr_init(r9127);
        mpfr_init(r9128);
        mpfr_init(r9129);
        mpfr_init(r9130);
        mpfr_init(r9131);
        mpfr_init(r9132);
        mpfr_init(r9133);
        mpfr_init(r9134);
}

double f_fm(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r9125, x_re, MPFR_RNDN);
        mpfr_set_d(r9126, y_re, MPFR_RNDN);
        mpfr_set_d(r9127, y_im, MPFR_RNDN);
        mpfr_set_d(r9128, x_im, MPFR_RNDN);
        mpfr_mul(r9129, r9127, r9128, MPFR_RNDN);
        mpfr_neg(r9130, r9129, MPFR_RNDN);
        mpfr_fma(r9131, r9125, r9126, r9130, MPFR_RNDN);
        mpfr_neg(r9132, r9127, MPFR_RNDN);
        mpfr_fma(r9133, r9132, r9128, r9129, MPFR_RNDN);
        mpfr_add(r9134, r9131, r9133, MPFR_RNDN);
        return mpfr_get_d(r9134, MPFR_RNDN);
}

static mpfr_t r9135, r9136, r9137, r9138, r9139, r9140, r9141, r9142, r9143, r9144;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r9135);
        mpfr_init(r9136);
        mpfr_init(r9137);
        mpfr_init(r9138);
        mpfr_init(r9139);
        mpfr_init(r9140);
        mpfr_init(r9141);
        mpfr_init(r9142);
        mpfr_init(r9143);
        mpfr_init(r9144);
}

double f_dm(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r9135, x_re, MPFR_RNDN);
        mpfr_set_d(r9136, y_re, MPFR_RNDN);
        mpfr_set_d(r9137, y_im, MPFR_RNDN);
        mpfr_set_d(r9138, x_im, MPFR_RNDN);
        mpfr_mul(r9139, r9137, r9138, MPFR_RNDN);
        mpfr_neg(r9140, r9139, MPFR_RNDN);
        mpfr_fma(r9141, r9135, r9136, r9140, MPFR_RNDN);
        mpfr_neg(r9142, r9137, MPFR_RNDN);
        mpfr_fma(r9143, r9142, r9138, r9139, MPFR_RNDN);
        mpfr_add(r9144, r9141, r9143, MPFR_RNDN);
        return mpfr_get_d(r9144, MPFR_RNDN);
}

