if (a->sign != b_sign) {
/* Subtraction */
if (likely(cmask_is_only_normals(ab_mask))) {
- if (parts_sub_normal(a, b)) {
+ if (partsN(sub_normal)(a, b)) {
return a;
}
/* Subtract was exact, fall through to set sign. */
} else {
/* Addition */
if (likely(cmask_is_only_normals(ab_mask))) {
- parts_add_normal(a, b);
+ partsN(add_normal)(a, b);
return a;
}
c_widen.exp = c->exp;
if (a->sign == c->sign) {
- parts_add_normal(&p_widen, &c_widen);
- } else if (!parts_sub_normal(&p_widen, &c_widen)) {
+ partsW(add_normal)(&p_widen, &c_widen);
+ } else if (!partsW(sub_normal)(&p_widen, &c_widen)) {
goto return_sub_zero;
}
}
f.exp = f_exp - frac_normalize(&f);
if (a_exp < 0) {
- parts_sub_normal(a, &f);
+ partsN(sub_normal)(a, &f);
} else if (a_exp > 0) {
- parts_add_normal(a, &f);
+ partsN(add_normal)(a, &f);
} else {
*a = f;
}
FloatParts128 *: parts128_##NAME, \
FloatParts256 *: parts256_##NAME)
-static void parts64_add_normal(FloatParts64 *a, FloatParts64 *b);
-static void parts128_add_normal(FloatParts128 *a, FloatParts128 *b);
-static void parts256_add_normal(FloatParts256 *a, FloatParts256 *b);
-
-#define parts_add_normal(A, B) \
- PARTS_GENERIC_64_128_256(add_normal, A)(A, B)
-
-static bool parts64_sub_normal(FloatParts64 *a, FloatParts64 *b);
-static bool parts128_sub_normal(FloatParts128 *a, FloatParts128 *b);
-static bool parts256_sub_normal(FloatParts256 *a, FloatParts256 *b);
-
-#define parts_sub_normal(A, B) \
- PARTS_GENERIC_64_128_256(sub_normal, A)(A, B)
-
static FloatParts64 *parts64_addsub(FloatParts64 *a, FloatParts64 *b,
float_status *s, bool subtract);
static FloatParts128 *parts128_addsub(FloatParts128 *a, FloatParts128 *b,
};
#define partsN(NAME) glue(glue(glue(parts,N),_),NAME)
+#define partsW(NAME) glue(glue(glue(parts,W),_),NAME)
#define FloatPartsN glue(FloatParts,N)
#define FloatPartsW glue(FloatParts,W)
#undef N
#undef W
#undef partsN
+#undef partsW
#undef FloatPartsN
#undef FloatPartsW