aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.target/aarch64/fmul_fcvt_1.c
blob: f78f6ee0f8eb38cafa53612899153d8faf7e60bf (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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
/* { dg-do run } */
/* { dg-options "-save-temps -O2 -fno-inline" } */

#define FUNC_DEFS(__a)	\
int			\
sffoo##__a (float x)	\
{			\
  return x * __a##.0f;	\
}			\
			\
unsigned int		\
usffoo##__a (float x)	\
{			\
  return x * __a##.0f;	\
}			\
			\
long			\
lsffoo##__a (float x)	\
{			\
  return x * __a##.0f;	\
}			\
			\
unsigned long		\
ulsffoo##__a (float x)	\
{			\
  return x * __a##.0f;	\
}

#define FUNC_DEFD(__a)	\
long long			\
dffoo##__a (double x)	\
{			\
  return x * __a##.0;	\
}			\
			\
unsigned long long	\
udffoo##__a (double x)	\
{			\
  return x * __a##.0;	\
}			\
int			\
sdffoo##__a (double x)	\
{			\
  return x * __a##.0;	\
}			\
			\
unsigned int		\
usdffoo##__a (double x)	\
{			\
  return x * __a##.0;	\
}

FUNC_DEFS (4)
FUNC_DEFD (4)
/* { dg-final { scan-assembler-times "fcvtzs\tw\[0-9\], s\[0-9\]*.*#2" 1 } } */
/* { dg-final { scan-assembler-times "fcvtzs\tx\[0-9\], s\[0-9\]*.*#2" 1 } } */
/* { dg-final { scan-assembler-times "fcvtzs\tx\[0-9\], d\[0-9\]*.*#2" 1 } } */
/* { dg-final { scan-assembler-times "fcvtzs\tw\[0-9\], d\[0-9\]*.*#2" 1 } } */
/* { dg-final { scan-assembler-times "fcvtzu\tw\[0-9\], s\[0-9\]*.*#2" 1 } } */
/* { dg-final { scan-assembler-times "fcvtzu\tx\[0-9\], s\[0-9\]*.*#2" 1 } } */
/* { dg-final { scan-assembler-times "fcvtzu\tx\[0-9\], d\[0-9\]*.*#2" 1 } } */
/* { dg-final { scan-assembler-times "fcvtzu\tw\[0-9\], d\[0-9\]*.*#2" 1 } } */

FUNC_DEFS (8)
FUNC_DEFD (8)
/* { dg-final { scan-assembler-times "fcvtzs\tw\[0-9\], s\[0-9\]*.*#3" 1 } } */
/* { dg-final { scan-assembler-times "fcvtzs\tx\[0-9\], s\[0-9\]*.*#3" 1 } } */
/* { dg-final { scan-assembler-times "fcvtzs\tx\[0-9\], d\[0-9\]*.*#3" 1 } } */
/* { dg-final { scan-assembler-times "fcvtzs\tw\[0-9\], d\[0-9\]*.*#3" 1 } } */
/* { dg-final { scan-assembler-times "fcvtzu\tw\[0-9\], s\[0-9\]*.*#3" 1 } } */
/* { dg-final { scan-assembler-times "fcvtzu\tx\[0-9\], s\[0-9\]*.*#3" 1 } } */
/* { dg-final { scan-assembler-times "fcvtzu\tx\[0-9\], d\[0-9\]*.*#3" 1 } } */
/* { dg-final { scan-assembler-times "fcvtzu\tw\[0-9\], d\[0-9\]*.*#3" 1 } } */

FUNC_DEFS (16)
FUNC_DEFD (16)
/* { dg-final { scan-assembler-times "fcvtzs\tw\[0-9\], s\[0-9\]*.*#4" 1 } } */
/* { dg-final { scan-assembler-times "fcvtzs\tx\[0-9\], s\[0-9\]*.*#4" 1 } } */
/* { dg-final { scan-assembler-times "fcvtzs\tx\[0-9\], d\[0-9\]*.*#4" 1 } } */
/* { dg-final { scan-assembler-times "fcvtzs\tw\[0-9\], d\[0-9\]*.*#4" 1 } } */
/* { dg-final { scan-assembler-times "fcvtzu\tw\[0-9\], s\[0-9\]*.*#4" 1 } } */
/* { dg-final { scan-assembler-times "fcvtzu\tx\[0-9\], s\[0-9\]*.*#4" 1 } } */
/* { dg-final { scan-assembler-times "fcvtzu\tx\[0-9\], d\[0-9\]*.*#4" 1 } } */
/* { dg-final { scan-assembler-times "fcvtzu\tw\[0-9\], d\[0-9\]*.*#4" 1 } } */

FUNC_DEFS (32)
FUNC_DEFD (32)
/* { dg-final { scan-assembler-times "fcvtzs\tw\[0-9\], s\[0-9\]*.*#5" 1 } } */
/* { dg-final { scan-assembler-times "fcvtzs\tx\[0-9\], s\[0-9\]*.*#5" 1 } } */
/* { dg-final { scan-assembler-times "fcvtzs\tx\[0-9\], d\[0-9\]*.*#5" 1 } } */
/* { dg-final { scan-assembler-times "fcvtzs\tw\[0-9\], d\[0-9\]*.*#5" 1 } } */
/* { dg-final { scan-assembler-times "fcvtzu\tw\[0-9\], s\[0-9\]*.*#5" 1 } } */
/* { dg-final { scan-assembler-times "fcvtzu\tx\[0-9\], s\[0-9\]*.*#5" 1 } } */
/* { dg-final { scan-assembler-times "fcvtzu\tx\[0-9\], d\[0-9\]*.*#5" 1 } } */
/* { dg-final { scan-assembler-times "fcvtzu\tw\[0-9\], d\[0-9\]*.*#5" 1 } } */

#define FUNC_TESTS(__a, __b)					\
do								\
  {								\
    if (sffoo##__a (__b) != (int)(__b * __a))			\
      __builtin_abort ();					\
    if (usffoo##__a (__b) != (unsigned int)(__b * __a))	\
      __builtin_abort ();					\
    if (lsffoo##__a (__b) != (long long)(__b * __a))		\
      __builtin_abort ();					\
    if (ulsffoo##__a (__b) != (unsigned long long)(__b * __a))	\
      __builtin_abort ();					\
  } while (0)

#define FUNC_TESTD(__a, __b)					\
do								\
  {								\
    if (dffoo##__a (__b) != (long long)(__b * __a))		\
      __builtin_abort ();					\
    if (udffoo##__a (__b) != (unsigned long long)(__b * __a))	\
      __builtin_abort ();					\
    if (sdffoo##__a (__b) != (int)(__b * __a))			\
      __builtin_abort ();					\
    if (usdffoo##__a (__b) != (unsigned int)(__b * __a))	\
      __builtin_abort ();					\
  } while (0)

int
main (void)
{
  float i;

  for (i = -0.001; i < 32.0; i += 1.0f)
    {
      FUNC_TESTS (4, i);
      FUNC_TESTS (8, i);
      FUNC_TESTS (16, i);
      FUNC_TESTS (32, i);

      FUNC_TESTD (4, i);
      FUNC_TESTD (8, i);
      FUNC_TESTD (16, i);
      FUNC_TESTD (32, i);
    }
  return 0;
}