]> git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/testsuite/gcc.target/avr/torture/int24-mul.c
Adjust tests to AVR_TINY.
[thirdparty/gcc.git] / gcc / testsuite / gcc.target / avr / torture / int24-mul.c
1 /* { dg-do run } */
2 /* { dg-options "-w" } */
3
4 #include <stdlib.h>
5
6 #ifndef __FLASH
7 #define __flash /* empty */
8 #endif
9
10 const __flash __int24 vals[] =
11 {
12 0, 1, 2, 3, -1, -2, -3, 0xff, 0x100, 0x101,
13 0xffL * 0xff, 0xfffL * 0xfff, 0x101010L, 0xaaaaaaL
14 };
15
16 void test_u (void)
17 {
18 unsigned int i;
19 unsigned long la, lb, lc;
20 __uint24 a, b, c;
21
22 int S = sizeof (vals) / sizeof (*vals);
23
24 for (i = 0; i < 500; i++)
25 {
26 if (i < S*S)
27 {
28 a = vals[i / S];
29 b = vals[i % S];
30 }
31 else
32 {
33 if (i & 1)
34 a += 0x7654321L;
35 else
36 b += 0x5fe453L;
37 }
38
39 c = a * b;
40
41 la = a;
42 lb = b;
43 lc = 0xffffff & (la * lb);
44
45 if (c != lc)
46 abort();
47 }
48 }
49
50 #define TEST_N_U(A1,A2,B) \
51 do { \
52 if ((0xffffff & (A1*B)) != A2*B) \
53 abort(); \
54 } while (0)
55
56 void test_nu (void)
57 {
58 unsigned long la;
59 unsigned int i;
60 int S = sizeof (vals) / sizeof (*vals);
61 __uint24 a;
62
63 for (i = 0; i < 500; i++)
64 {
65 a = i < S
66 ? vals[i % S]
67 : a + 0x7654321;
68
69 la = a;
70
71 TEST_N_U (la, a, 2);
72 TEST_N_U (la, a, 3);
73 TEST_N_U (la, a, 4);
74 TEST_N_U (la, a, 5);
75 TEST_N_U (la, a, 15);
76 TEST_N_U (la, a, 16);
77 TEST_N_U (la, a, 128);
78 TEST_N_U (la, a, 0x1000);
79 }
80 }
81
82 int main (void)
83 {
84 test_u();
85 test_nu();
86
87 exit(0);
88
89 return 0;
90 }