mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-31 08:16:47 +00:00 
			
		
		
		
	git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@3955 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			127 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			127 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #include <stdlib.h>
 | |
| #include <stdio.h>
 | |
| 
 | |
| #define __STDC_LIMIT_MACROS 1
 | |
| #include <inttypes.h>
 | |
| 
 | |
| 
 | |
| int
 | |
| main(int argc, char** argv)
 | |
| {
 | |
|   int8_t        C, c1;
 | |
|   uint8_t       uc1;
 | |
| 
 | |
|   short         S, s1;
 | |
|   unsigned short us1;
 | |
| 
 | |
|   int           i1;
 | |
|   unsigned      ui1;
 | |
| 
 | |
|   int64_t       L, l1;
 | |
|   uint64_t      ul1;
 | |
| 
 | |
|   float         F;
 | |
|   double        D;
 | |
|   
 | |
|   /* input values */
 | |
|   C = (char)  (argc >= 2)? atoi(argv[1]) : 0x64;           /* 100 = 'd' */
 | |
|   S = (short) (argc >= 3)? atoi(argv[2]) : -769;           /* 0xfcff = -769 */
 | |
|   L = (long)  (argc >= 4)? atoi(argv[3]) : 0xa3a3a3a3a3a3; /*179923220407203*/
 | |
|   
 | |
|   /* Test integer to integer conversions */
 | |
|   uc1 = (uint8_t) C;                       /* 100 = 'd' */
 | |
|   us1 = (unsigned short) C;                /* 100 = 'd' */
 | |
|   ui1 = (unsigned int) C;                  /* 100 = 'd' */
 | |
|   ul1 = (unsigned long) C;                 /* 100 = 'd' */
 | |
| 
 | |
|   s1  = (short) C;                         /* 100 = 'd' */
 | |
|   i1  = (int) C;                           /* 100 = 'd' */
 | |
|   l1  = (long) C;                          /* 100 = 'd' */
 | |
|   
 | |
|   printf("\nCHAR             C = '%c' (%d)\t\t(0x%x)\n", C, C, C);
 | |
|   printf("char to short   s1 = %d\t\t(0x%x)\n", s1, s1);
 | |
|   printf("char to int     i1 = %d\t\t(0x%x)\n", i1, i1);
 | |
|   printf("char to long    l1 = %ld\t\t(0x%lx)\n", l1, l1);
 | |
| 
 | |
|   printf("\nchar to ubyte  uc1 = %u\t\t(0x%x)\n", uc1, uc1);
 | |
|   printf("char to ushort us1 = %u\t\t(0x%x)\n", us1, us1);
 | |
|   printf("char to uint   ui1 = %u\t\t(0x%x)\n", ui1, ui1);
 | |
|   printf("char to ulong  ul1 = %lu\t\t(0x%lx)\n", ul1, ul1);
 | |
| 
 | |
|   uc1 = (uint8_t) S;                            /* 0xff = 255 */
 | |
|   us1 = (unsigned short) S;                     /* 0xfcff = 64767 */
 | |
|   ui1 = (unsigned int) S;                       /* 0xfffffcff = 4294966527 */
 | |
|   ul1 = (unsigned long) S;                      /* */
 | |
| 
 | |
|   c1  = (int8_t) S;                             /* 0xff = -1 */
 | |
|   i1  = (int) S;                                /* 0xfffffcff = -769 */
 | |
|   l1  = (long) S;                               /* */
 | |
| 
 | |
|   printf("\n\nSHORT            S = %d\t\t(0x%x)\n", S, S);
 | |
|   printf("short to byte    c1 = %d\t\t(0x%x)\n", c1, c1);
 | |
|   printf("short to int     i1 = %d\t\t(0x%x)\n", i1, i1);
 | |
|   printf("short to long    l1 = %ld\t\t(0x%lx)\n", l1, l1);
 | |
| 
 | |
|   printf("\nshort to ubyte  uc1 = %u\t\t(0x%x)\n", uc1, uc1);
 | |
|   printf("short to ushort us1 = %u\t\t(0x%x)\n", us1, us1);
 | |
|   printf("short to uint   ui1 = %u\t\t(0x%x)\n", ui1, ui1);
 | |
|   printf("short to ulong  ul1 = %lu\t\t(0x%lx)\n", ul1, ul1);
 | |
| 
 | |
|   uc1 = (unsigned char) L;                      /* */
 | |
|   c1  = (int8_t) L;                             /* */
 | |
|   s1  = (short) L;                              /* */
 | |
|   us1 = (unsigned short) L;                     /* */
 | |
|   i1  = (int) L;                                /* */
 | |
|   ui1 = (unsigned int) L;                       /* */
 | |
|   ul1 = (unsigned long) L;                       /* */
 | |
| 
 | |
|   printf("\n\nLONG            L = %ld\t\t(0x%lx)\n", L, L);
 | |
|   printf("long to byte    c1 = %d\t\t(0x%x)\n", c1, c1);
 | |
|   printf("long to short   s1 = %d\t\t(0x%x)\n", s1, s1);
 | |
|   printf("long to int     i1 = %d\t\t(0x%x)\n", i1, i1);
 | |
| 
 | |
|   printf("\nlong to ubyte  uc1 = %u\t\t(0x%x)\n", uc1, uc1);
 | |
|   printf("long to ushort us1 = %u\t\t(0x%x)\n", us1, us1);
 | |
|   printf("long to uint   ui1 = %u\t\t(0x%x)\n", ui1, ui1);
 | |
|   printf("long to ulong  ul1 = %lu\t\t(0x%lx)\n", ul1, ul1);
 | |
| 
 | |
|   /* Test floating-point to integer conversions */
 | |
|   F = (float)  (argc >= 4)? atof(argv[3]) : 1.0;
 | |
|   D =          (argc >= 5)? atof(argv[4]) : 2.0;
 | |
|   
 | |
|   us1 = (unsigned short) F;
 | |
|   ui1 = (unsigned int) F;
 | |
|   ul1 = (unsigned long) F;
 | |
| 
 | |
|   s1  = (short) F;
 | |
|   i1  = (int) F;
 | |
|   l1  = (long) F;
 | |
| 
 | |
|   printf("\n\nFLOAT            F = %f\n", F);
 | |
|   printf("float to short   s1 = %d\t\t(0x%x)\n", s1, s1);
 | |
|   printf("float to int     i1 = %d\t\t(0x%x)\n", i1, i1);
 | |
| 
 | |
|   printf("float to ushort us1 = %u\t\t(0x%x)\n", us1, us1);
 | |
|   printf("float to uint   ui1 = %u\t\t(0x%x)\n", ui1, ui1);
 | |
|   printf("float to ulong  ul1 = %lu\t\t(0x%lx)\n", ul1, ul1);
 | |
| 
 | |
|   us1 = (unsigned short) D;
 | |
|   ui1 = (unsigned int) D;
 | |
|   ul1 = (unsigned long) D;
 | |
|   
 | |
|   s1  = (short) D;
 | |
|   i1  = (int) D;
 | |
|   l1  = (long) D;
 | |
| 
 | |
|   printf("\n\nDOUBLE            D = %f\n", D);
 | |
|   printf("double to short   s1 = %d\t\t(0x%x)\n", s1, s1);
 | |
|   printf("double to int     i1 = %d\t\t(0x%x)\n", i1, i1);
 | |
|   printf("double to long    l1 = %ld\t\t(0x%lx)\n", l1, l1);
 | |
| 
 | |
|   printf("double to ushort us1 = %u\t\t(0x%x)\n", us1, us1);
 | |
|   printf("double to uint   ui1 = %u\t\t(0x%x)\n", ui1, ui1);
 | |
|   printf("double to ulong  ul1 = %lu\t\t(0x%lx)\n", ul1, ul1);
 | |
| 
 | |
|   return 0;
 | |
| }
 |