]>
git.proxmox.com Git - rustc.git/blob - vendor/compiler_builtins/compiler-rt/lib/builtins/ppc/multc3.c
1 /* This file is distributed under the University of Illinois Open Source
2 * License. See LICENSE.TXT for details.
6 #include "../int_math.h"
8 #define makeFinite(x) { \
9 (x).s.hi = crt_copysign(crt_isinf((x).s.hi) ? 1.0 : 0.0, (x).s.hi); \
13 #define zeroNaN(x) { \
14 if (crt_isnan((x).s.hi)) { \
15 (x).s.hi = crt_copysign(0.0, (x).s.hi); \
21 __multc3(long double a
, long double b
, long double c
, long double d
)
23 long double ac
= __gcc_qmul(a
,c
);
24 long double bd
= __gcc_qmul(b
,d
);
25 long double ad
= __gcc_qmul(a
,d
);
26 long double bc
= __gcc_qmul(b
,c
);
28 DD real
= { .ld
= __gcc_qsub(ac
,bd
) };
29 DD imag
= { .ld
= __gcc_qadd(ad
,bc
) };
31 if (crt_isnan(real
.s
.hi
) && crt_isnan(imag
.s
.hi
))
40 if (crt_isinf(aDD
.s
.hi
) || crt_isinf(bDD
.s
.hi
))
49 if (crt_isinf(cDD
.s
.hi
) || crt_isinf(dDD
.s
.hi
))
60 DD acDD
= { .ld
= ac
};
61 DD bdDD
= { .ld
= bd
};
62 DD adDD
= { .ld
= ad
};
63 DD bcDD
= { .ld
= bc
};
65 if (crt_isinf(acDD
.s
.hi
) || crt_isinf(bdDD
.s
.hi
) ||
66 crt_isinf(adDD
.s
.hi
) || crt_isinf(bcDD
.s
.hi
))
78 real
.s
.hi
= CRT_INFINITY
* (aDD
.s
.hi
*cDD
.s
.hi
- bDD
.s
.hi
*dDD
.s
.hi
);
80 imag
.s
.hi
= CRT_INFINITY
* (aDD
.s
.hi
*dDD
.s
.hi
+ bDD
.s
.hi
*cDD
.s
.hi
);
85 long double _Complex z
;