forked from OSchip/llvm-project
88 lines
2.4 KiB
C
88 lines
2.4 KiB
C
// REQUIRES: mips-registered-target
|
|
// RUN: %clang --target=mips64-unknown-linux -S -mmadd4 %s -o -| FileCheck %s -check-prefix=MADD4
|
|
// RUN: %clang --target=mips64-unknown-linux -S -mno-madd4 %s -o -| FileCheck %s -check-prefix=NOMADD4
|
|
// RUN: %clang --target=mips64-unknown-linux -S -mmadd4 -fno-honor-nans %s -o -| FileCheck %s -check-prefix=MADD4-NONAN
|
|
// RUN: %clang --target=mips64-unknown-linux -S -mno-madd4 -fno-honor-nans %s -o -| FileCheck %s -check-prefix=NOMADD4-NONAN
|
|
|
|
float madd_s (float f, float g, float h)
|
|
{
|
|
return (f * g) + h;
|
|
}
|
|
// MADD4: madd.s
|
|
// NOMADD4: mul.s
|
|
// NOMADD4: add.s
|
|
|
|
float msub_s (float f, float g, float h)
|
|
{
|
|
return (f * g) - h;
|
|
}
|
|
// MADD4: msub.s
|
|
// NOMADD4: mul.s
|
|
// NOMADD4: sub.s
|
|
|
|
double madd_d (double f, double g, double h)
|
|
{
|
|
return (f * g) + h;
|
|
}
|
|
// MADD4: madd.d
|
|
// NOMADD4: mul.d
|
|
// NOMADD4: add.d
|
|
|
|
double msub_d (double f, double g, double h)
|
|
{
|
|
return (f * g) - h;
|
|
}
|
|
// MADD4: msub.d
|
|
// NOMADD4: mul.d
|
|
// NOMADD4: sub.d
|
|
|
|
|
|
float nmadd_s (float f, float g, float h)
|
|
{
|
|
// FIXME: Zero has been explicitly placed to force generation of a positive
|
|
// zero in IR until pattern used to match this instruction is changed to
|
|
// comply with negative zero as well.
|
|
return 0-((f * g) + h);
|
|
}
|
|
// MADD4-NONAN: nmadd.s
|
|
// NOMADD4-NONAN: mul.s
|
|
// NOMADD4-NONAN: add.s
|
|
// NOMADD4-NONAN: sub.s
|
|
|
|
float nmsub_s (float f, float g, float h)
|
|
{
|
|
// FIXME: Zero has been explicitly placed to force generation of a positive
|
|
// zero in IR until pattern used to match this instruction is changed to
|
|
// comply with negative zero as well.
|
|
return 0-((f * g) - h);
|
|
}
|
|
// MADD4-NONAN: nmsub.s
|
|
// NOMADD4-NONAN: mul.s
|
|
// NOMADD4-NONAN: sub.s
|
|
// NOMADD4-NONAN: sub.s
|
|
|
|
double nmadd_d (double f, double g, double h)
|
|
{
|
|
// FIXME: Zero has been explicitly placed to force generation of a positive
|
|
// zero in IR until pattern used to match this instruction is changed to
|
|
// comply with negative zero as well.
|
|
return 0-((f * g) + h);
|
|
}
|
|
// MADD4-NONAN: nmadd.d
|
|
// NOMADD4-NONAN: mul.d
|
|
// NOMADD4-NONAN: add.d
|
|
// NOMADD4-NONAN: sub.d
|
|
|
|
double nmsub_d (double f, double g, double h)
|
|
{
|
|
// FIXME: Zero has been explicitly placed to force generation of a positive
|
|
// zero in IR until pattern used to match this instruction is changed to
|
|
// comply with negative zero as well.
|
|
return 0-((f * g) - h);
|
|
}
|
|
// MADD4-NONAN: nmsub.d
|
|
// NOMADD4-NONAN: mul.d
|
|
// NOMADD4-NONAN: sub.d
|
|
// NOMADD4-NONAN: sub.d
|
|
|