1 /* { dg-do run } */
2 /* { dg-options "-save-temps -O2 -fno-inline" } */
3
4 #define FUNC_DEFS(__a) \
5 int \
6 sffoo##__a (float x) \
7 { \
8 return x * __a##.0f; \
9 } \
10 \
11 unsigned int \
12 usffoo##__a (float x) \
13 { \
14 return x * __a##.0f; \
15 } \
16 \
17 long \
18 lsffoo##__a (float x) \
19 { \
20 return x * __a##.0f; \
21 } \
22 \
23 unsigned long \
24 ulsffoo##__a (float x) \
25 { \
26 return x * __a##.0f; \
27 }
28
29 #define FUNC_DEFD(__a) \
30 long long \
31 dffoo##__a (double x) \
32 { \
33 return x * __a##.0; \
34 } \
35 \
36 unsigned long long \
37 udffoo##__a (double x) \
38 { \
39 return x * __a##.0; \
40 } \
41 int \
42 sdffoo##__a (double x) \
43 { \
44 return x * __a##.0; \
45 } \
46 \
47 unsigned int \
48 usdffoo##__a (double x) \
49 { \
50 return x * __a##.0; \
51 }
52
53 FUNC_DEFS (4)
54 FUNC_DEFD (4)
55 /* { dg-final { scan-assembler-times "fcvtzs\tw\[0-9\], s\[0-9\]*.*#2" 1 } } */
56 /* { dg-final { scan-assembler-times "fcvtzs\tx\[0-9\], s\[0-9\]*.*#2" 1 } } */
57 /* { dg-final { scan-assembler-times "fcvtzs\tx\[0-9\], d\[0-9\]*.*#2" 1 } } */
58 /* { dg-final { scan-assembler-times "fcvtzs\tw\[0-9\], d\[0-9\]*.*#2" 1 } } */
59 /* { dg-final { scan-assembler-times "fcvtzu\tw\[0-9\], s\[0-9\]*.*#2" 1 } } */
60 /* { dg-final { scan-assembler-times "fcvtzu\tx\[0-9\], s\[0-9\]*.*#2" 1 } } */
61 /* { dg-final { scan-assembler-times "fcvtzu\tx\[0-9\], d\[0-9\]*.*#2" 1 } } */
62 /* { dg-final { scan-assembler-times "fcvtzu\tw\[0-9\], d\[0-9\]*.*#2" 1 } } */
63
64 FUNC_DEFS (8)
65 FUNC_DEFD (8)
66 /* { dg-final { scan-assembler-times "fcvtzs\tw\[0-9\], s\[0-9\]*.*#3" 1 } } */
67 /* { dg-final { scan-assembler-times "fcvtzs\tx\[0-9\], s\[0-9\]*.*#3" 1 } } */
68 /* { dg-final { scan-assembler-times "fcvtzs\tx\[0-9\], d\[0-9\]*.*#3" 1 } } */
69 /* { dg-final { scan-assembler-times "fcvtzs\tw\[0-9\], d\[0-9\]*.*#3" 1 } } */
70 /* { dg-final { scan-assembler-times "fcvtzu\tw\[0-9\], s\[0-9\]*.*#3" 1 } } */
71 /* { dg-final { scan-assembler-times "fcvtzu\tx\[0-9\], s\[0-9\]*.*#3" 1 } } */
72 /* { dg-final { scan-assembler-times "fcvtzu\tx\[0-9\], d\[0-9\]*.*#3" 1 } } */
73 /* { dg-final { scan-assembler-times "fcvtzu\tw\[0-9\], d\[0-9\]*.*#3" 1 } } */
74
75 FUNC_DEFS (16)
76 FUNC_DEFD (16)
77 /* { dg-final { scan-assembler-times "fcvtzs\tw\[0-9\], s\[0-9\]*.*#4" 1 } } */
78 /* { dg-final { scan-assembler-times "fcvtzs\tx\[0-9\], s\[0-9\]*.*#4" 1 } } */
79 /* { dg-final { scan-assembler-times "fcvtzs\tx\[0-9\], d\[0-9\]*.*#4" 1 } } */
80 /* { dg-final { scan-assembler-times "fcvtzs\tw\[0-9\], d\[0-9\]*.*#4" 1 } } */
81 /* { dg-final { scan-assembler-times "fcvtzu\tw\[0-9\], s\[0-9\]*.*#4" 1 } } */
82 /* { dg-final { scan-assembler-times "fcvtzu\tx\[0-9\], s\[0-9\]*.*#4" 1 } } */
83 /* { dg-final { scan-assembler-times "fcvtzu\tx\[0-9\], d\[0-9\]*.*#4" 1 } } */
84 /* { dg-final { scan-assembler-times "fcvtzu\tw\[0-9\], d\[0-9\]*.*#4" 1 } } */
85
86 FUNC_DEFS (32)
87 FUNC_DEFD (32)
88 /* { dg-final { scan-assembler-times "fcvtzs\tw\[0-9\], s\[0-9\]*.*#5" 1 } } */
89 /* { dg-final { scan-assembler-times "fcvtzs\tx\[0-9\], s\[0-9\]*.*#5" 1 } } */
90 /* { dg-final { scan-assembler-times "fcvtzs\tx\[0-9\], d\[0-9\]*.*#5" 1 } } */
91 /* { dg-final { scan-assembler-times "fcvtzs\tw\[0-9\], d\[0-9\]*.*#5" 1 } } */
92 /* { dg-final { scan-assembler-times "fcvtzu\tw\[0-9\], s\[0-9\]*.*#5" 1 } } */
93 /* { dg-final { scan-assembler-times "fcvtzu\tx\[0-9\], s\[0-9\]*.*#5" 1 } } */
94 /* { dg-final { scan-assembler-times "fcvtzu\tx\[0-9\], d\[0-9\]*.*#5" 1 } } */
95 /* { dg-final { scan-assembler-times "fcvtzu\tw\[0-9\], d\[0-9\]*.*#5" 1 } } */
96
97 #define FUNC_TESTS(__a, __b) \
98 do \
99 { \
100 if (sffoo##__a (__b) != (int)(__b * __a)) \
101 __builtin_abort (); \
102 if (usffoo##__a (__b) != (unsigned int)(__b * __a)) \
103 __builtin_abort (); \
104 if (lsffoo##__a (__b) != (long long)(__b * __a)) \
105 __builtin_abort (); \
106 if (ulsffoo##__a (__b) != (unsigned long long)(__b * __a)) \
107 __builtin_abort (); \
108 } while (0)
109
110 #define FUNC_TESTD(__a, __b) \
111 do \
112 { \
113 if (dffoo##__a (__b) != (long long)(__b * __a)) \
114 __builtin_abort (); \
115 if (udffoo##__a (__b) != (unsigned long long)(__b * __a)) \
116 __builtin_abort (); \
117 if (sdffoo##__a (__b) != (int)(__b * __a)) \
118 __builtin_abort (); \
119 if (usdffoo##__a (__b) != (unsigned int)(__b * __a)) \
120 __builtin_abort (); \
121 } while (0)
122
123 int
124 main (void)
125 {
126 float i;
127
128 for (i = -0.001; i < 32.0; i += 1.0f)
129 {
130 FUNC_TESTS (4, i);
131 FUNC_TESTS (8, i);
132 FUNC_TESTS (16, i);
133 FUNC_TESTS (32, i);
134
135 FUNC_TESTD (4, i);
136 FUNC_TESTD (8, i);
137 FUNC_TESTD (16, i);
138 FUNC_TESTD (32, i);
139 }
140 return 0;
141 }