generate-macros.c - blind - suckless command-line video editing utility
(HTM) git clone git://git.suckless.org/blind
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
generate-macros.c (1924B)
---
1 /* See LICENSE file for copyright and license details. */
2 #include <stdint.h>
3 #include <stdio.h>
4
5 int
6 main(void)
7 {
8 char *u16 = (char *)&(uint16_t){0x0001};
9 char *u32 = (char *)&(uint32_t){0x00010203};
10 char *u64 = (char *)&(uint64_t){0x0001020304050607};
11 int le16 = (u16[1] == 0 && u16[0] == 1);
12 int le32 = (u32[3] == 0 && u32[2] == 1 && u32[1] == 2 && u32[0] == 3);
13 int le64 = (u64[7] == 0 && u64[6] == 1 && u64[5] == 2 && u64[4] == 3 &&
14 u64[3] == 4 && u64[2] == 5 && u64[1] == 6 && u64[0] == 7);
15 int be16 = (u16[0] == 0 && u16[1] == 1);
16 int be32 = (u32[0] == 0 && u32[1] == 1 && u32[2] == 2 && u32[3] == 3);
17 int be64 = (u64[0] == 0 && u64[1] == 1 && u64[2] == 2 && u64[3] == 3 &&
18 u64[4] == 4 && u64[5] == 5 && u64[6] == 6 && u64[7] == 7);
19
20 if (le16)
21 printf("#define HOST_ENDIAN_IS_LITTLE_ENDIAN_16\n");
22 if (le32)
23 printf("#define HOST_ENDIAN_IS_LITTLE_ENDIAN_32\n");
24 if (le64)
25 printf("#define HOST_ENDIAN_IS_LITTLE_ENDIAN_64\n");
26 if (le16 && le32 && le64)
27 printf("#define HOST_ENDIAN_IS_LITTLE_ENDIAN\n");
28
29 if (be16)
30 printf("#define HOST_ENDIAN_IS_BIG_ENDIAN_16\n");
31 if (be32)
32 printf("#define HOST_ENDIAN_IS_BIG_ENDIAN_32\n");
33 if (be64)
34 printf("#define HOST_ENDIAN_IS_BIG_ENDIAN_64\n");
35 if (be16 && be32 && be64)
36 printf("#define HOST_ENDIAN_IS_BIG_ENDIAN\n");
37
38 if (sizeof(float) == 4) {
39 unsigned long int a, b;
40 a = (unsigned long int)*(uint32_t *)&(float){ (float)(1. / 12.) };
41 b = (unsigned long int)*(uint32_t *)&(float){ -(float)(1. / 12.) };
42 printf("#define USING_BINARY32 %i\n",
43 a == 0x3daaaaabUL && b == 0xbdaaaaabUL);
44 }
45 if (sizeof(double) == 8) {
46 unsigned long long int a, b;
47 a = (unsigned long long int)*(uint64_t *)&(double){ 1. / 12. };
48 b = (unsigned long long int)*(uint64_t *)&(double){ -1. / 12. };
49 printf("#define USING_BINARY64 %i\n",
50 a == 0x3fb5555555555555ULL && b == 0xbfb5555555555555ULL);
51 }
52
53 return 0;
54 }