fixed a bunch of warnings
[libfirm] / ir / be / test / llvm / casts.c
1 #include <stdlib.h>
2 #include <stdio.h>
3
4 #ifndef __STDC_LIMIT_MACROS
5 #define __STDC_LIMIT_MACROS 1
6 #endif
7 #include <inttypes.h>
8
9
10 static int64_t lls[] = {
11   123ULL, -1LL, -14LL, 14, 1ULL << 63, 0
12 };
13
14 int
15 main(int argc, char** argv)
16 {
17   int8_t        C, c1;
18   uint8_t       uc1;
19
20   short         S, s1;
21   unsigned short us1;
22
23   int           i1, i;
24   unsigned      ui1;
25
26   long          L, l1;
27   unsigned long ul1;
28
29   float         F;
30   double        D;
31
32   /* input values */
33   C = (char)  (argc >= 2)? atoi(argv[1]) : 0x64;           /* 100 = 'd' */
34   S = (short) (argc >= 3)? atoi(argv[2]) : -769;           /* 0xfcff = -769 */
35   L = (long)  (argc >= 4)? atoi(argv[3]) : 0xa3a3a3a3a3a3; /*179923220407203*/
36
37   /* Test integer to integer conversions */
38   uc1 = (uint8_t) C;                       /* 100 = 'd' */
39   us1 = (unsigned short) C;                /* 100 = 'd' */
40   ui1 = (unsigned int) C;                  /* 100 = 'd' */
41   ul1 = (unsigned long) C;                 /* 100 = 'd' */
42
43   s1  = (short) C;                         /* 100 = 'd' */
44   i1  = (int) C;                           /* 100 = 'd' */
45   l1  = (long) C;                          /* 100 = 'd' */
46
47   printf("\nCHAR             C = '%c' (%d)\t\t(0x%x)\n", C, C, C);
48   printf("char to short   s1 = %d\t\t(0x%x)\n", s1, s1);
49   printf("char to int     i1 = %d\t\t(0x%x)\n", i1, i1);
50   printf("char to long    l1 = %ld\t\t(0x%lx)\n", l1, l1);
51
52   printf("\nchar to ubyte  uc1 = %u\t\t(0x%x)\n", uc1, uc1);
53   printf("char to ushort us1 = %u\t\t(0x%x)\n", us1, us1);
54   printf("char to uint   ui1 = %u\t\t(0x%x)\n", ui1, ui1);
55   printf("char to ulong  ul1 = %lu\t\t(0x%lx)\n", ul1, ul1);
56
57   uc1 = (uint8_t) S;                            /* 0xff = 255 */
58   us1 = (unsigned short) S;                     /* 0xfcff = 64767 */
59   ui1 = (unsigned int) S;                       /* 0xfffffcff = 4294966527 */
60   ul1 = (unsigned long) S;                      /* */
61
62   c1  = (int8_t) S;                             /* 0xff = -1 */
63   i1  = (int) S;                                /* 0xfffffcff = -769 */
64   l1  = (long) S;                               /* */
65
66   printf("\n\nSHORT            S = %d\t\t(0x%x)\n", S, S);
67   printf("short to byte    c1 = %d\t\t(0x%x)\n", c1, c1);
68   printf("short to int     i1 = %d\t\t(0x%x)\n", i1, i1);
69   printf("short to long    l1 = %ld\t\t(0x%lx)\n", l1, l1);
70
71   printf("\nshort to ubyte  uc1 = %u\t\t(0x%x)\n", uc1, uc1);
72   printf("short to ushort us1 = %u\t\t(0x%x)\n", us1, us1);
73   printf("short to uint   ui1 = %u\t\t(0x%x)\n", ui1, ui1);
74   printf("short to ulong  ul1 = %lu\t\t(0x%lx)\n", ul1, ul1);
75
76   uc1 = (unsigned char) L;                      /* */
77   c1  = (int8_t) L;                             /* */
78   s1  = (short) L;                              /* */
79   us1 = (unsigned short) L;                     /* */
80   i1  = (int) L;                                /* */
81   ui1 = (unsigned int) L;                       /* */
82   ul1 = (unsigned long) L;                       /* */
83
84   printf("\n\nLONG            L = %ld\t\t(0x%lx)\n", L, L);
85   printf("long to byte    c1 = %d\t\t(0x%x)\n", c1, c1);
86   printf("long to short   s1 = %d\t\t(0x%x)\n", s1, s1);
87   printf("long to int     i1 = %d\t\t(0x%x)\n", i1, i1);
88
89   printf("\nlong to ubyte  uc1 = %u\t\t(0x%x)\n", uc1, uc1);
90   printf("long to ushort us1 = %u\t\t(0x%x)\n", us1, us1);
91   printf("long to uint   ui1 = %u\t\t(0x%x)\n", ui1, ui1);
92   printf("long to ulong  ul1 = %lu\t\t(0x%lx)\n", ul1, ul1);
93
94   /* Test floating-point to integer conversions */
95   F = (float)  (argc >= 4)? atof(argv[3]) : 1.0;
96   D =          (argc >= 5)? atof(argv[4]) : 2.0;
97
98   us1 = (unsigned short) F;
99   ui1 = (unsigned int) F;
100   ul1 = (unsigned long) F;
101
102   s1  = (short) F;
103   i1  = (int) F;
104   l1  = (long) F;
105
106   printf("\n\nFLOAT            F = %f\n", F);
107   printf("float to short   s1 = %d\t\t(0x%x)\n", s1, s1);
108   printf("float to int     i1 = %d\t\t(0x%x)\n", i1, i1);
109
110   printf("float to ushort us1 = %u\t\t(0x%x)\n", us1, us1);
111   printf("float to uint   ui1 = %u\t\t(0x%x)\n", ui1, ui1);
112   printf("float to ulong  ul1 = %lu\t\t(0x%lx)\n", ul1, ul1);
113
114   us1 = (unsigned short) D;
115   ui1 = (unsigned int) D;
116   ul1 = (unsigned long) D;
117
118   s1  = (short) D;
119   i1  = (int) D;
120   l1  = (long) D;
121
122   printf("\n\nDOUBLE            D = %f\n", D);
123   printf("double to short   s1 = %d\t\t(0x%x)\n", s1, s1);
124   printf("double to int     i1 = %d\t\t(0x%x)\n", i1, i1);
125   printf("double to long    l1 = %ld\t\t(0x%lx)\n", l1, l1);
126
127   printf("double to ushort us1 = %u\t\t(0x%x)\n", us1, us1);
128   printf("double to uint   ui1 = %u\t\t(0x%x)\n", ui1, ui1);
129   printf("double to ulong  ul1 = %lu\t\t(0x%lx)\n", ul1, ul1);
130
131   for (i = 0; lls[i]; ++i) {
132     printf("double <- long long %lld = %f\n", lls[i], (double)lls[i]);
133     printf("double <- unsigned long long %llu = %f\n",
134            (unsigned long long)lls[i], (double)(unsigned long long)lls[i]);
135   }
136
137   return 0;
138 }