summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.target/mips/fma-19.c
blob: c038f191d9c0acb8697c474c83a215913b103c5d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
/* { dg-options "-mgp64 -mhard-float isa=loongson -O3 -fno-fast-math -ffp-contract=off" } */
/* { dg-final { scan-assembler-not "\tmadd\\." } } */
/* { dg-final { scan-assembler-not "\tmsub\\." } } */
/* { dg-final { scan-assembler-not "\tnmadd\\." } } */
/* { dg-final { scan-assembler-not "\tnmsub\\." } } */

/* No function should use fused operations, however high the -O level.  */

NOMIPS16 float
not_madd_s (float b, float c, float d)
{
  return b * c + d;
}

NOMIPS16 float
not_msub_s (float b, float c, float d)
{
  return b * c + -d;
}

NOMIPS16 float
not_nmadd_s (float b, float c, float d)
{
  return -(b * c + d);
}

NOMIPS16 float
not_nmsub_s (float b, float c, float d)
{
  return -(b * c + -d);
}

NOMIPS16 float
not_nmadd_s_2 (float b, float c, float d)
{
  return -b * c - d;
}

NOMIPS16 float
not_nmsub_s_2 (float b, float c, float d)
{
  return -b * c + d;
}

NOMIPS16 double
not_madd_d (double b, double c, double d)
{
  return b * c + d;
}

NOMIPS16 double
not_msub_d (double b, double c, double d)
{
  return b * c + -d;
}

NOMIPS16 double
not_nmadd_d (double b, double c, double d)
{
  return -(b * c + d);
}

NOMIPS16 double
not_nmsub_d (double b, double c, double d)
{
  return -(b * c + -d);
}

NOMIPS16 double
not_nmadd_d_2 (double b, double c, double d)
{
  return -b * c - d;
}

NOMIPS16 double
not_nmsub_d_2 (double b, double c, double d)
{
  return -b * c + d;
}