[PR81647][AARCH64] Fix handling of Unordered Comparisons in aarch64-simd.md
[official-gcc.git] / gcc / testsuite / gcc.target / aarch64 / cvtf_1.c
blob5f2ff81a477339ba51a0b58d952f8f41d6ef4fc7
1 /* { dg-do run } */
2 /* { dg-options "-save-temps -fno-inline -O1" } */
4 #define FCVTDEF(ftype,itype) \
5 void \
6 cvt_##itype##_to_##ftype (itype a, ftype b)\
7 {\
8 ftype c;\
9 c = (ftype) a;\
10 if ( (c - b) > 0.00001) abort();\
13 #define force_simd_for_float(v) asm volatile ("mov %s0, %1.s[0]" :"=w" (v) :"w" (v) :)
14 #define force_simd_for_double(v) asm volatile ("mov %d0, %1.d[0]" :"=w" (v) :"w" (v) :)
16 #define FCVTDEF_SISD(ftype,itype) \
17 void \
18 cvt_##itype##_to_##ftype##_sisd (itype a, ftype b)\
20 ftype c;\
21 force_simd_for_##ftype(a);\
22 c = (ftype) a;\
23 if ( (c - b) > 0.00001) abort();\
26 #define FCVT(ftype,itype,ival,fval) cvt_##itype##_to_##ftype (ival, fval);
27 #define FCVT_SISD(ftype,itype,ival,fval) cvt_##itype##_to_##ftype##_sisd (ival, fval);
29 typedef int int32_t;
30 typedef unsigned int uint32_t;
31 typedef long long int int64_t;
32 typedef unsigned long long int uint64_t;
34 extern void abort();
36 FCVTDEF (float, int32_t)
37 /* { dg-final { scan-assembler "scvtf\ts\[0-9\]+,\ w\[0-9\]+" } } */
38 FCVTDEF (float, uint32_t)
39 /* { dg-final { scan-assembler "ucvtf\ts\[0-9\]+,\ w\[0-9\]+" } } */
40 FCVTDEF (double, int32_t)
41 /* "scvtf\td\[0-9\]+,\ w\[0-9\]+" */
42 FCVTDEF (double, uint32_t)
43 /* "ucvtf\td\[0-9\]+,\ w\[0-9\]+" */
44 FCVTDEF (float, int64_t)
45 /* "scvtf\ts\[0-9\]+,\ x\[0-9\]+" */
46 FCVTDEF (float, uint64_t)
47 /* "ucvtf\ts\[0-9\]+,\ x\[0-9\]+" */
48 FCVTDEF (double, int64_t)
49 /* { dg-final { scan-assembler "scvtf\td\[0-9\]+,\ x\[0-9\]+" } } */
50 FCVTDEF (double, uint64_t)
51 /* { dg-final { scan-assembler "ucvtf\td\[0-9\]+,\ x\[0-9\]+" } } */
52 FCVTDEF_SISD (float, int32_t)
53 /* { dg-final { scan-assembler "scvtf\ts\[0-9\]+,\ s\[0-9\]+" } } */
54 FCVTDEF_SISD (double, int64_t)
55 /* { dg-final { scan-assembler "scvtf\td\[0-9\]+,\ d\[0-9\]+" } } */
56 FCVTDEF_SISD (float, uint32_t)
57 /* { dg-final { scan-assembler "ucvtf\ts\[0-9\]+,\ s\[0-9\]+" } } */
58 FCVTDEF_SISD (double, uint64_t)
59 /* { dg-final { scan-assembler "ucvtf\td\[0-9\]+,\ d\[0-9\]+" } } */
60 FCVTDEF_SISD (float, int64_t)
61 /* { dg-final { scan-assembler-times "scvtf\ts\[0-9\]+,\ x\[0-9\]+" 2 } } */
62 FCVTDEF_SISD (float, uint64_t)
63 /* { dg-final { scan-assembler-times "ucvtf\ts\[0-9\]+,\ x\[0-9\]+" 2 } } */
64 FCVTDEF_SISD (double, int32_t)
65 /* { dg-final { scan-assembler-times "scvtf\td\[0-9\]+,\ w\[0-9\]+" 2 } } */
66 FCVTDEF_SISD (double, uint32_t)
67 /* { dg-final { scan-assembler-times "ucvtf\td\[0-9\]+,\ w\[0-9\]+" 2 } } */
69 int32_t ival = -1234;
70 int64_t llival = -13031303L;
71 uint32_t uival = 1234;
72 uint64_t ullival = 13031303L;
74 int main ()
76 float x;
77 double y;
79 FCVT (float, int32_t, ival, -1234.0);
80 FCVT (float, uint32_t, uival, 1234.0);
81 FCVT (float, int64_t, llival, -13031303.0);
82 FCVT (float, uint64_t, ullival, 13031303.0);
83 FCVT (double, int32_t, ival, -1234.0);
84 FCVT (double, uint32_t, uival, 1234.0);
85 FCVT (double, int64_t, llival, -13031303.0);
86 FCVT (double, uint64_t, ullival, 13031303.0);
87 FCVT_SISD (float, int32_t, ival, -1234.0);
88 FCVT_SISD (double, int64_t, llival, -13031303.0);
89 FCVT_SISD (float, uint32_t, uival, 1234.0);
90 FCVT_SISD (double, uint64_t, ullival, 13031303.0);
92 return 0;