xref: /qemu/tests/tcg/multiarch/overflow.c (revision 70e975203f366f2f30daaeb714bb852562b7b72f)
1*69d0535dSGautam Agrawal #include <stdio.h>
2*69d0535dSGautam Agrawal 
overflow_add_32(int x,int y)3*69d0535dSGautam Agrawal int overflow_add_32(int x, int y)
4*69d0535dSGautam Agrawal {
5*69d0535dSGautam Agrawal     int res;
6*69d0535dSGautam Agrawal     return __builtin_add_overflow(x, y, &res);
7*69d0535dSGautam Agrawal }
8*69d0535dSGautam Agrawal 
overflow_add_64(long long x,long long y)9*69d0535dSGautam Agrawal int overflow_add_64(long long x, long long y)
10*69d0535dSGautam Agrawal {
11*69d0535dSGautam Agrawal     long long res;
12*69d0535dSGautam Agrawal     return __builtin_add_overflow(x, y, &res);
13*69d0535dSGautam Agrawal }
14*69d0535dSGautam Agrawal 
overflow_sub_32(int x,int y)15*69d0535dSGautam Agrawal int overflow_sub_32(int x, int y)
16*69d0535dSGautam Agrawal {
17*69d0535dSGautam Agrawal     int res;
18*69d0535dSGautam Agrawal     return __builtin_sub_overflow(x, y, &res);
19*69d0535dSGautam Agrawal }
20*69d0535dSGautam Agrawal 
overflow_sub_64(long long x,long long y)21*69d0535dSGautam Agrawal int overflow_sub_64(long long x, long long y)
22*69d0535dSGautam Agrawal {
23*69d0535dSGautam Agrawal     long long res;
24*69d0535dSGautam Agrawal     return __builtin_sub_overflow(x, y, &res);
25*69d0535dSGautam Agrawal }
26*69d0535dSGautam Agrawal 
27*69d0535dSGautam Agrawal int a1_add = -2147483648;
28*69d0535dSGautam Agrawal int b1_add = -2147483648;
29*69d0535dSGautam Agrawal long long a2_add = -9223372036854775808ULL;
30*69d0535dSGautam Agrawal long long b2_add = -9223372036854775808ULL;
31*69d0535dSGautam Agrawal 
32*69d0535dSGautam Agrawal int a1_sub;
33*69d0535dSGautam Agrawal int b1_sub = -2147483648;
34*69d0535dSGautam Agrawal long long a2_sub = 0L;
35*69d0535dSGautam Agrawal long long b2_sub = -9223372036854775808ULL;
36*69d0535dSGautam Agrawal 
main()37*69d0535dSGautam Agrawal int main()
38*69d0535dSGautam Agrawal {
39*69d0535dSGautam Agrawal     int ret = 0;
40*69d0535dSGautam Agrawal 
41*69d0535dSGautam Agrawal     if (!overflow_add_32(a1_add, b1_add)) {
42*69d0535dSGautam Agrawal         fprintf(stderr, "data overflow while adding 32 bits\n");
43*69d0535dSGautam Agrawal         ret = 1;
44*69d0535dSGautam Agrawal     }
45*69d0535dSGautam Agrawal     if (!overflow_add_64(a2_add, b2_add)) {
46*69d0535dSGautam Agrawal         fprintf(stderr, "data overflow while adding 64 bits\n");
47*69d0535dSGautam Agrawal         ret = 1;
48*69d0535dSGautam Agrawal     }
49*69d0535dSGautam Agrawal     if (!overflow_sub_32(a1_sub, b1_sub)) {
50*69d0535dSGautam Agrawal         fprintf(stderr, "data overflow while subtracting 32 bits\n");
51*69d0535dSGautam Agrawal         ret = 1;
52*69d0535dSGautam Agrawal     }
53*69d0535dSGautam Agrawal     if (!overflow_sub_64(a2_sub, b2_sub)) {
54*69d0535dSGautam Agrawal         fprintf(stderr, "data overflow while subtracting 64 bits\n");
55*69d0535dSGautam Agrawal         ret = 1;
56*69d0535dSGautam Agrawal     }
57*69d0535dSGautam Agrawal     return ret;
58*69d0535dSGautam Agrawal }
59