]>
git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/testsuite/gcc.target/avr/torture/builtins-4-roundfx.c
1 /* { dg-options "-std=gnu99" } */
6 extern void abort (void);
8 typedef short _Fract fx_hr_t
;
10 typedef long _Fract fx_lr_t
;
11 typedef long long _Fract fx_llr_t
;
13 typedef unsigned short _Fract fx_uhr_t
;
14 typedef unsigned _Fract fx_ur_t
;
15 typedef unsigned long _Fract fx_ulr_t
;
16 typedef unsigned long long _Fract fx_ullr_t
;
18 typedef short _Accum fx_hk_t
;
19 typedef _Accum fx_k_t
;
20 typedef long _Accum fx_lk_t
;
21 typedef long long _Accum fx_llk_t
;
23 typedef unsigned short _Accum fx_uhk_t
;
24 typedef unsigned _Accum fx_uk_t
;
25 typedef unsigned long _Accum fx_ulk_t
;
26 typedef unsigned long long _Accum fx_ullk_t
;
29 typedef unsigned char int_uhr_t
;
30 typedef unsigned int int_ur_t
;
31 typedef unsigned long int_ulr_t
;
32 typedef unsigned long long int_ullr_t
;
34 typedef unsigned int int_uhk_t
;
35 typedef unsigned long int_uk_t
;
36 typedef unsigned long long int_ulk_t
;
37 typedef unsigned long long int_ullk_t
;
40 #define DEFTEST1(T,FX) \
41 T test1_##FX (T x, int rp) \
43 return round##FX (x, rp); \
46 unsigned T test1_u##FX (unsigned T x, int rp) \
48 return roundu##FX (x, rp); \
51 DEFTEST1 (short fract
, hr
)
53 DEFTEST1 (long fract
, lr
)
54 DEFTEST1 (long long fract
, llr
)
56 DEFTEST1 (short accum
, hk
)
59 DEFTEST1 (long accum
, lk
)
60 DEFTEST1 (long long accum
, llk
)
63 #define TEST2(FX, RP, VAL, ROUND) \
65 if (round##FX (FX##bits (VAL), RP) != FX##bits (ROUND)) \
67 fx_##FX##_t (*f)(fx_##FX##_t,int) = round##FX; \
68 asm ("" : "+r" (f)); \
69 if (f (FX##bits (VAL), RP) != FX##bits (ROUND)) \
73 static void test2hr (void)
75 TEST2 (hr
, 1, 0x7f, 0x7f);
76 TEST2 (hr
, 2, 0x70, 0x7f);
77 TEST2 (hr
, 3, 0x78, 0x7f);
78 TEST2 (hr
, 4, 0x7f, 0x7f);
80 TEST2 (uhr
, 1, 0x7f, 0x80);
81 TEST2 (uhr
, 2, 0x7f, 0x80);
82 TEST2 (uhr
, 3, 0x7f, 0x80);
83 TEST2 (uhr
, 4, 0x7f, 0x80);
88 TEST2 (k
, 1, 0x7fffff00, 0x7fffffff);
89 TEST2 (k
, 2, 0x7ffffff0, 0x7fffffff);
90 TEST2 (k
, 2, 0x7ffff000, 0x7fffffff);
91 TEST2 (k
, 3, 0x7ffff000, 0x7ffff000);
92 TEST2 (k
, 3, 0x7ffff800, 0x7fffffff);
93 TEST2 (k
, 3, 0x7ffff7ff, 0x7ffff000);
94 TEST2 (k
, 4, 0x7ffff7ff, 0x7ffff800);
96 TEST2 (uk
, 1, 0x7fffffff, 1ul << 31);
97 TEST2 (uk
, 2, 0x7fffffff, 1ul << 31);
98 TEST2 (uk
, 3, 0x7fffffff, 1ul << 31);
99 TEST2 (uk
, 4, 0x7fffffff, 1ul << 31);
102 #define DEFTEST3(FX, FBIT) \
103 void test3##FX (void) \
105 TEST2 (FX, FBIT-1, 0b01100, 0b01100); \
106 TEST2 (FX, FBIT-2, 0b01100, 0b01100); \
107 TEST2 (FX, FBIT-3, 0b01100, 0b10000); \
108 TEST2 (FX, FBIT-4, 0b01100, 0b10000); \
109 TEST2 (FX, FBIT-5, 0b01100, 0); \
111 if (FX##bits ((int_##FX##_t) -1) > 0) \
114 TEST2 (FX, FBIT-1, -0b01100, -0b01100); \
115 TEST2 (FX, FBIT-2, -0b01100, -0b01100); \
116 TEST2 (FX, FBIT-3, -0b01100, -0b01000); \
117 TEST2 (FX, FBIT-4, -0b01100, -0b10000); \
118 TEST2 (FX, FBIT-5, -0b01100, -0b00000); \
121 DEFTEST3 (hr
, SFRACT_FBIT
)
122 DEFTEST3 (r
, FRACT_FBIT
)
123 DEFTEST3 (lr
, LFRACT_FBIT
)
125 DEFTEST3 (uhr
, USFRACT_FBIT
)
126 DEFTEST3 (ur
, UFRACT_FBIT
)
127 DEFTEST3 (ulr
, ULFRACT_FBIT
)
129 DEFTEST3 (hk
, SACCUM_FBIT
)
130 DEFTEST3 (k
, ACCUM_FBIT
)
131 DEFTEST3 (lk
, LACCUM_FBIT
)
132 DEFTEST3 (llk
, LLACCUM_FBIT
)
134 DEFTEST3 (uhk
, USACCUM_FBIT
)
135 DEFTEST3 (uk
, UACCUM_FBIT
)
136 DEFTEST3 (ulk
, ULACCUM_FBIT
)
137 DEFTEST3 (ullk
, ULLACCUM_FBIT
)