#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 r25252 = x_re;
        float r25253 = y_re;
        float r25254 = r25252 * r25253;
        float r25255 = x_im;
        float r25256 = y_im;
        float r25257 = r25255 * r25256;
        float r25258 = r25254 - r25257;
        return r25258;
}

double f_id(double x_re, double x_im, double y_re, double y_im) {
        double r25259 = x_re;
        double r25260 = y_re;
        double r25261 = r25259 * r25260;
        double r25262 = x_im;
        double r25263 = y_im;
        double r25264 = r25262 * r25263;
        double r25265 = r25261 - r25264;
        return r25265;
}


double f_of(float x_re, float x_im, float y_re, float y_im) {
        float r25266 = x_re;
        float r25267 = y_re;
        float r25268 = y_im;
        float r25269 = x_im;
        float r25270 = r25268 * r25269;
        float r25271 = -r25270;
        float r25272 = fma(r25266, r25267, r25271);
        float r25273 = -r25268;
        float r25274 = fma(r25273, r25269, r25270);
        float r25275 = r25272 + r25274;
        return r25275;
}

double f_od(double x_re, double x_im, double y_re, double y_im) {
        double r25276 = x_re;
        double r25277 = y_re;
        double r25278 = y_im;
        double r25279 = x_im;
        double r25280 = r25278 * r25279;
        double r25281 = -r25280;
        double r25282 = fma(r25276, r25277, r25281);
        double r25283 = -r25278;
        double r25284 = fma(r25283, r25279, r25280);
        double r25285 = r25282 + r25284;
        return r25285;
}

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 r25286, r25287, r25288, r25289, r25290, r25291, r25292;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r25286);
        mpfr_init(r25287);
        mpfr_init(r25288);
        mpfr_init(r25289);
        mpfr_init(r25290);
        mpfr_init(r25291);
        mpfr_init(r25292);
}

double f_im(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r25286, x_re, MPFR_RNDN);
        mpfr_set_d(r25287, y_re, MPFR_RNDN);
        mpfr_mul(r25288, r25286, r25287, MPFR_RNDN);
        mpfr_set_d(r25289, x_im, MPFR_RNDN);
        mpfr_set_d(r25290, y_im, MPFR_RNDN);
        mpfr_mul(r25291, r25289, r25290, MPFR_RNDN);
        mpfr_sub(r25292, r25288, r25291, MPFR_RNDN);
        return mpfr_get_d(r25292, MPFR_RNDN);
}

static mpfr_t r25293, r25294, r25295, r25296, r25297, r25298, r25299, r25300, r25301, r25302;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r25293);
        mpfr_init(r25294);
        mpfr_init(r25295);
        mpfr_init(r25296);
        mpfr_init(r25297);
        mpfr_init(r25298);
        mpfr_init(r25299);
        mpfr_init(r25300);
        mpfr_init(r25301);
        mpfr_init(r25302);
}

double f_fm(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r25293, x_re, MPFR_RNDN);
        mpfr_set_d(r25294, y_re, MPFR_RNDN);
        mpfr_set_d(r25295, y_im, MPFR_RNDN);
        mpfr_set_d(r25296, x_im, MPFR_RNDN);
        mpfr_mul(r25297, r25295, r25296, MPFR_RNDN);
        mpfr_neg(r25298, r25297, MPFR_RNDN);
        mpfr_fma(r25299, r25293, r25294, r25298, MPFR_RNDN);
        mpfr_neg(r25300, r25295, MPFR_RNDN);
        mpfr_fma(r25301, r25300, r25296, r25297, MPFR_RNDN);
        mpfr_add(r25302, r25299, r25301, MPFR_RNDN);
        return mpfr_get_d(r25302, MPFR_RNDN);
}

static mpfr_t r25303, r25304, r25305, r25306, r25307, r25308, r25309, r25310, r25311, r25312;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r25303);
        mpfr_init(r25304);
        mpfr_init(r25305);
        mpfr_init(r25306);
        mpfr_init(r25307);
        mpfr_init(r25308);
        mpfr_init(r25309);
        mpfr_init(r25310);
        mpfr_init(r25311);
        mpfr_init(r25312);
}

double f_dm(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r25303, x_re, MPFR_RNDN);
        mpfr_set_d(r25304, y_re, MPFR_RNDN);
        mpfr_set_d(r25305, y_im, MPFR_RNDN);
        mpfr_set_d(r25306, x_im, MPFR_RNDN);
        mpfr_mul(r25307, r25305, r25306, MPFR_RNDN);
        mpfr_neg(r25308, r25307, MPFR_RNDN);
        mpfr_fma(r25309, r25303, r25304, r25308, MPFR_RNDN);
        mpfr_neg(r25310, r25305, MPFR_RNDN);
        mpfr_fma(r25311, r25310, r25306, r25307, MPFR_RNDN);
        mpfr_add(r25312, r25309, r25311, MPFR_RNDN);
        return mpfr_get_d(r25312, MPFR_RNDN);
}

