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