Mercurial > hg > th-libs
annotate th_endian.h @ 432:1b3472ba7b23
Bump copyrights.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Sun, 01 Jan 2017 01:59:49 +0200 |
parents | 4fee16cb28c1 |
children | 347bfd3e017e |
rev | line source |
---|---|
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
1 /* |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
2 * Endianess handling |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
3 * Programmed and designed by Matti 'ccr' Hamalainen |
432 | 4 * (C) Copyright 2002-2017 Tecnic Software productions (TNSP) |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
5 * |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
6 * Please read file 'COPYING' for information on license and distribution. |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
7 */ |
49
598609fb49b0
Change how "config.h" is included, etc.
Matti Hamalainen <ccr@tnsp.org>
parents:
10
diff
changeset
|
8 #ifndef TH_ENDIAN_H |
598609fb49b0
Change how "config.h" is included, etc.
Matti Hamalainen <ccr@tnsp.org>
parents:
10
diff
changeset
|
9 #define TH_ENDIAN_H |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
10 |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
11 #ifdef HAVE_CONFIG_H |
180 | 12 # include "config.h" |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
13 #endif |
49
598609fb49b0
Change how "config.h" is included, etc.
Matti Hamalainen <ccr@tnsp.org>
parents:
10
diff
changeset
|
14 #include "th_types.h" |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
15 |
5 | 16 #ifdef __cplusplus |
17 extern "C" { | |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
18 #endif |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
19 |
52 | 20 /* Check endianess |
21 */ | |
22 #ifndef TH_BYTEORDER | |
23 # error Undefined byteorder (TH_BYTEORDER not set.) | |
24 #endif | |
25 | |
26 #define TH_BIG_ENDIAN 1234 | |
27 #define TH_LITTLE_ENDIAN 4321 | |
28 | |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
29 |
5 | 30 /* Endianess swapping macros |
31 */ | |
10 | 32 #define TH_SWAP_16_LE_BE(value) ((uint16_t) ( \ |
5 | 33 (uint16_t) ((uint16_t) (value) >> 8) | \ |
34 (uint16_t) ((uint16_t) (value) << 8)) ) | |
35 | |
36 | |
37 #define TH_SWAP_32_LE_BE(value) ((uint32_t) ( \ | |
38 (((uint32_t) (value) & (uint32_t) 0x000000ffU) << 24) | \ | |
39 (((uint32_t) (value) & (uint32_t) 0x0000ff00U) << 8) | \ | |
40 (((uint32_t) (value) & (uint32_t) 0x00ff0000U) >> 8) | \ | |
41 (((uint32_t) (value) & (uint32_t) 0xff000000U) >> 24))) | |
42 | |
43 #define TH_SWAP_64_LE_BE(value) ((uint64_t) ( \ | |
44 (((uint64_t) (value) & (uint64_t) 0x00000000000000ffULL) << 56) | \ | |
45 (((uint64_t) (value) & (uint64_t) 0x000000000000ff00ULL) << 40) | \ | |
46 (((uint64_t) (value) & (uint64_t) 0x0000000000ff0000ULL) << 24) | \ | |
47 (((uint64_t) (value) & (uint64_t) 0x00000000ff000000ULL) << 8) | \ | |
48 (((uint64_t) (value) & (uint64_t) 0x000000ff00000000ULL) >> 8) | \ | |
49 (((uint64_t) (value) & (uint64_t) 0x0000ff0000000000ULL) >> 24) | \ | |
50 (((uint64_t) (value) & (uint64_t) 0x00ff000000000000ULL) >> 40) | \ | |
51 (((uint64_t) (value) & (uint64_t) 0xff00000000000000ULL) >> 56))) | |
212 | 52 |
5 | 53 |
54 /* Macros that swap only when needed ... | |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
55 */ |
51
1607c0691dee
Change byteorder support. Now TH_BYTEORDER must be defined to either
Matti Hamalainen <ccr@tnsp.org>
parents:
49
diff
changeset
|
56 #if (TH_BYTEORDER == TH_BIG_ENDIAN) |
5 | 57 |
58 #define TH_LE16_TO_NATIVE(value) TH_SWAP_16_LE_BE(value) | |
59 #define TH_LE32_TO_NATIVE(value) TH_SWAP_32_LE_BE(value) | |
60 #define TH_NATIVE_TO_LE16(value) TH_SWAP_16_LE_BE(value) | |
61 #define TH_NATIVE_TO_LE32(value) TH_SWAP_32_LE_BE(value) | |
62 | |
63 #define TH_BE16_TO_NATIVE(value) ((uint16_t) (value)) | |
64 #define TH_BE32_TO_NATIVE(value) ((uint32_t) (value)) | |
65 #define TH_NATIVE_TO_BE16(value) ((uint16_t) (value)) | |
66 #define TH_NATIVE_TO_BE32(value) ((uint32_t) (value)) | |
67 | |
68 #define TH_LE64_TO_NATIVE(value) TH_SWAP_64_LE_BE(value) | |
69 #define TH_NATIVE_TO_LE64(value) TH_SWAP_64_LE_BE(value) | |
70 #define TH_BE64_TO_NATIVE(value) ((uint64_t) (value)) | |
71 #define TH_NATIVE_TO_BE64(value) ((uint64_t) (value)) | |
72 | |
129 | 73 // !TH_BIG_ENDIAN |
51
1607c0691dee
Change byteorder support. Now TH_BYTEORDER must be defined to either
Matti Hamalainen <ccr@tnsp.org>
parents:
49
diff
changeset
|
74 #elif (TH_BYTEORDER == TH_LITTLE_ENDIAN) |
5 | 75 |
76 #define TH_LE16_TO_NATIVE(value) ((uint16_t) (value)) | |
77 #define TH_LE32_TO_NATIVE(value) ((uint32_t) (value)) | |
78 #define TH_NATIVE_TO_LE16(value) ((uint16_t) (value)) | |
79 #define TH_NATIVE_TO_LE32(value) ((uint32_t) (value)) | |
80 | |
81 #define TH_BE16_TO_NATIVE(value) TH_SWAP_16_LE_BE(value) | |
82 #define TH_BE32_TO_NATIVE(value) TH_SWAP_32_LE_BE(value) | |
83 #define TH_NATIVE_TO_BE16(value) TH_SWAP_16_LE_BE(value) | |
84 #define TH_NATIVE_TO_BE32(value) TH_SWAP_32_LE_BE(value) | |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
85 |
5 | 86 #define TH_LE64_TO_NATIVE(value) ((uint64_t) (value)) |
87 #define TH_NATIVE_TO_LE64(value) ((uint64_t) (value)) | |
88 #define TH_BE64_TO_NATIVE(value) TH_SWAP_64_LE_BE(value) | |
89 #define TH_NATIVE_TO_BE64(value) TH_SWAP_64_LE_BE(value) | |
90 | |
51
1607c0691dee
Change byteorder support. Now TH_BYTEORDER must be defined to either
Matti Hamalainen <ccr@tnsp.org>
parents:
49
diff
changeset
|
91 #else |
200 | 92 # error Unsupported byte order! |
5 | 93 #endif |
94 | |
213
592bf6da0f1f
Add native to / from he* "conversion" macros, which do nothing.
Matti Hamalainen <ccr@tnsp.org>
parents:
212
diff
changeset
|
95 // |
216
4fee16cb28c1
Meh, rename he/HE to ne/NE. Native vs Host.
Matti Hamalainen <ccr@tnsp.org>
parents:
214
diff
changeset
|
96 // NE = Native Endian, aka same as native |
213
592bf6da0f1f
Add native to / from he* "conversion" macros, which do nothing.
Matti Hamalainen <ccr@tnsp.org>
parents:
212
diff
changeset
|
97 // Provided for completeness |
592bf6da0f1f
Add native to / from he* "conversion" macros, which do nothing.
Matti Hamalainen <ccr@tnsp.org>
parents:
212
diff
changeset
|
98 // |
216
4fee16cb28c1
Meh, rename he/HE to ne/NE. Native vs Host.
Matti Hamalainen <ccr@tnsp.org>
parents:
214
diff
changeset
|
99 #define TH_NE16_TO_NATIVE(value) (value) |
4fee16cb28c1
Meh, rename he/HE to ne/NE. Native vs Host.
Matti Hamalainen <ccr@tnsp.org>
parents:
214
diff
changeset
|
100 #define TH_NE32_TO_NATIVE(value) (value) |
4fee16cb28c1
Meh, rename he/HE to ne/NE. Native vs Host.
Matti Hamalainen <ccr@tnsp.org>
parents:
214
diff
changeset
|
101 #define TH_NE64_TO_NATIVE(value) (value) |
213
592bf6da0f1f
Add native to / from he* "conversion" macros, which do nothing.
Matti Hamalainen <ccr@tnsp.org>
parents:
212
diff
changeset
|
102 |
216
4fee16cb28c1
Meh, rename he/HE to ne/NE. Native vs Host.
Matti Hamalainen <ccr@tnsp.org>
parents:
214
diff
changeset
|
103 #define TH_NATIVE_TO_NE16(value) (value) |
4fee16cb28c1
Meh, rename he/HE to ne/NE. Native vs Host.
Matti Hamalainen <ccr@tnsp.org>
parents:
214
diff
changeset
|
104 #define TH_NATIVE_TO_NE32(value) (value) |
4fee16cb28c1
Meh, rename he/HE to ne/NE. Native vs Host.
Matti Hamalainen <ccr@tnsp.org>
parents:
214
diff
changeset
|
105 #define TH_NATIVE_TO_NE64(value) (value) |
213
592bf6da0f1f
Add native to / from he* "conversion" macros, which do nothing.
Matti Hamalainen <ccr@tnsp.org>
parents:
212
diff
changeset
|
106 |
5 | 107 |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
108 #ifdef __cplusplus |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
109 } |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
110 #endif |
129 | 111 #endif // TH_ENDIAN_H |