53#if (defined(_MSC_VER) && !defined(__clang__)) || defined(__INTEL_COMPILER) || defined(__INTEL_LLVM_COMPILER)
68 #if defined(_MSC_VER) && !defined(__INTEL_COMPILER) && !defined(__INTEL_LLVM_COMPILER) && !defined(__clang__)
78 #define _pint_bswap16(x) _byteswap_ushort(x)
79 #define _pint_bswap32(x) _byteswap_ulong(x)
81 #define _pint_bswap64(x) _byteswap_uint64(x)
82 #elif defined(__INTEL_COMPILER)
90 #define _pint_bswap16(x) _bswap16(x)
91 #define _pint_bswap32(x) _bswap32(x)
92 #define _pint_bswap64(x) _bswap64(x)
109 #define _pint_bswap16(x) __builtin_bswap16(x)
110 #define _pint_bswap32(x) __builtin_bswap32(x)
111 #define _pint_bswap64(x) __builtin_bswap64(x)
117 #if G_BYTE_ORDER == G_BIG_ENDIAN
121 #define _pint_betoh16(x) (x)
122 #define _pint_betoh32(x) (x)
123 #define _pint_betoh64(x) (x)
124 #define _pint_htobe16(x) (x)
125 #define _pint_htobe32(x) (x)
126 #define _pint_htobe64(x) (x)
127 #define _pint_letoh16(x) _pint_bswap16(x)
128 #define _pint_letoh32(x) _pint_bswap32(x)
129 #define _pint_letoh64(x) _pint_bswap64(x)
130 #define _pint_htole16(x) _pint_bswap16(x)
131 #define _pint_htole32(x) _pint_bswap32(x)
132 #define _pint_htole64(x) _pint_bswap64(x)
133 #elif G_BYTE_ORDER == G_LITTLE_ENDIAN
137 #define _pint_letoh16(x) (x)
138 #define _pint_letoh32(x) (x)
139 #define _pint_letoh64(x) (x)
140 #define _pint_htole16(x) (x)
141 #define _pint_htole32(x) (x)
142 #define _pint_htole64(x) (x)
143 #define _pint_betoh16(x) _pint_bswap16(x)
144 #define _pint_betoh32(x) _pint_bswap32(x)
145 #define _pint_betoh64(x) _pint_bswap64(x)
146 #define _pint_htobe16(x) _pint_bswap16(x)
147 #define _pint_htobe32(x) _pint_bswap32(x)
148 #define _pint_htobe64(x) _pint_bswap64(x)
150 #error "Sorry, we don't support byte orders other than big- and little-endian"
162static inline uint16_t pntohu16(
const void *p)
166 memcpy(&ret, p,
sizeof(ret));
167 return _pint_betoh16(ret);
169 return (uint16_t)*((
const uint8_t *)(p)+0)<<8|
170 (uint16_t)*((
const uint8_t *)(p)+1)<<0;
182static inline uint32_t pntohu32(
const void *p)
186 memcpy(&ret, p,
sizeof(ret));
187 return _pint_betoh32(ret);
189 return (uint32_t)*((
const uint8_t *)(p)+0)<<24|
190 (uint32_t)*((
const uint8_t *)(p)+1)<<16|
191 (uint32_t)*((
const uint8_t *)(p)+2)<<8|
192 (uint32_t)*((
const uint8_t *)(p)+3)<<0;
204static inline uint64_t pntohu64(
const void *p)
208 memcpy(&ret, p,
sizeof(ret));
209 return _pint_betoh64(ret);
211 return (uint64_t)*((
const uint8_t *)(p)+0)<<56|
212 (uint64_t)*((
const uint8_t *)(p)+1)<<48|
213 (uint64_t)*((
const uint8_t *)(p)+2)<<40|
214 (uint64_t)*((
const uint8_t *)(p)+3)<<32|
215 (uint64_t)*((
const uint8_t *)(p)+4)<<24|
216 (uint64_t)*((
const uint8_t *)(p)+5)<<16|
217 (uint64_t)*((
const uint8_t *)(p)+6)<<8|
218 (uint64_t)*((
const uint8_t *)(p)+7)<<0;
230static inline uint16_t pletohu16(
const void *p)
234 memcpy(&ret, p,
sizeof(ret));
235 return _pint_letoh16(ret);
237 return (uint16_t)*((
const uint8_t *)(p)+1)<<8|
238 (uint16_t)*((
const uint8_t *)(p)+0)<<0;
250static inline uint32_t pletohu32(
const void *p)
254 memcpy(&ret, p,
sizeof(ret));
255 return _pint_letoh32(ret);
257 return (uint32_t)*((
const uint8_t *)(p)+3)<<24|
258 (uint32_t)*((
const uint8_t *)(p)+2)<<16|
259 (uint32_t)*((
const uint8_t *)(p)+1)<<8|
260 (uint32_t)*((
const uint8_t *)(p)+0)<<0;
272static inline uint64_t pletohu64(
const void *p)
276 memcpy(&ret, p,
sizeof(ret));
277 return _pint_letoh64(ret);
279 return (uint64_t)*((
const uint8_t *)(p)+7)<<56|
280 (uint64_t)*((
const uint8_t *)(p)+6)<<48|
281 (uint64_t)*((
const uint8_t *)(p)+5)<<40|
282 (uint64_t)*((
const uint8_t *)(p)+4)<<32|
283 (uint64_t)*((
const uint8_t *)(p)+3)<<24|
284 (uint64_t)*((
const uint8_t *)(p)+2)<<16|
285 (uint64_t)*((
const uint8_t *)(p)+1)<<8|
286 (uint64_t)*((
const uint8_t *)(p)+0)<<0;
297static inline void phtonu16(uint8_t *p, uint16_t v)
300 v = _pint_htobe16(v);
301 memcpy(p, &v,
sizeof(v));
303 p[0] = (uint8_t)(v >> 8);
304 p[1] = (uint8_t)(v >> 0);
315static inline void phtonu32(uint8_t *p, uint32_t v)
318 v = _pint_htobe32(v);
319 memcpy(p, &v,
sizeof(v));
321 p[0] = (uint8_t)(v >> 24);
322 p[1] = (uint8_t)(v >> 16);
323 p[2] = (uint8_t)(v >> 8);
324 p[3] = (uint8_t)(v >> 0);
335static inline void phtonu64(uint8_t *p, uint64_t v)
338 v = _pint_htobe64(v);
339 memcpy(p, &v,
sizeof(v));
341 p[0] = (uint8_t)(v >> 56);
342 p[1] = (uint8_t)(v >> 48);
343 p[2] = (uint8_t)(v >> 40);
344 p[3] = (uint8_t)(v >> 32);
345 p[4] = (uint8_t)(v >> 24);
346 p[5] = (uint8_t)(v >> 16);
347 p[6] = (uint8_t)(v >> 8);
348 p[7] = (uint8_t)(v >> 0);
359static inline void phtoleu16(uint8_t *p, uint16_t v)
362 v = _pint_htole16(v);
363 memcpy(p, &v,
sizeof(v));
365 p[0] = (uint8_t)(v >> 0);
366 p[1] = (uint8_t)(v >> 8);
377static inline void phtoleu32(uint8_t *p, uint32_t v)
380 v = _pint_htole32(v);
381 memcpy(p, &v,
sizeof(v));
383 p[0] = (uint8_t)(v >> 0);
384 p[1] = (uint8_t)(v >> 8);
385 p[2] = (uint8_t)(v >> 16);
386 p[3] = (uint8_t)(v >> 24);
397static inline void phtoleu64(uint8_t *p, uint64_t v)
400 v = _pint_htole64(v);
401 memcpy(p, &v,
sizeof(v));
403 p[0] = (uint8_t)(v >> 0);
404 p[1] = (uint8_t)(v >> 8);
405 p[2] = (uint8_t)(v >> 16);
406 p[3] = (uint8_t)(v >> 24);
407 p[4] = (uint8_t)(v >> 32);
408 p[5] = (uint8_t)(v >> 40);
409 p[6] = (uint8_t)(v >> 48);
410 p[7] = (uint8_t)(v >> 56);
425static inline uint8_t pntohu8(
const void *p)
427 return *((
const uint8_t *)(p)+0)<<0;
437static inline uint8_t pletohu8(
const void *p)
439 return *((
const uint8_t *)(p)+0)<<0;
449static inline void phtonu8(uint8_t *p, uint8_t v)
451 p[0] = (uint8_t)((v) >> 0);
461static inline void phtoleu8(uint8_t *p, uint8_t v)
463 p[0] = (uint8_t)((v) >> 0);
485static inline uint32_t pntohu24(
const void *p)
487 return (uint32_t)*((
const uint8_t *)(p)+0)<<16|
488 (uint32_t)*((
const uint8_t *)(p)+1)<<8|
489 (uint32_t)*((
const uint8_t *)(p)+2)<<0;
500static inline uint64_t pntohu40(
const void *p)
502 return (uint64_t)*((
const uint8_t *)(p)+0)<<32|
503 (uint64_t)*((
const uint8_t *)(p)+1)<<24|
504 (uint64_t)*((
const uint8_t *)(p)+2)<<16|
505 (uint64_t)*((
const uint8_t *)(p)+3)<<8|
506 (uint64_t)*((
const uint8_t *)(p)+4)<<0;
517static inline uint64_t pntohu48(
const void *p)
519 return (uint64_t)*((
const uint8_t *)(p)+0)<<40|
520 (uint64_t)*((
const uint8_t *)(p)+1)<<32|
521 (uint64_t)*((
const uint8_t *)(p)+2)<<24|
522 (uint64_t)*((
const uint8_t *)(p)+3)<<16|
523 (uint64_t)*((
const uint8_t *)(p)+4)<<8|
524 (uint64_t)*((
const uint8_t *)(p)+5)<<0;
535static inline uint64_t pntohu56(
const void *p)
537 return (uint64_t)*((
const uint8_t *)(p)+0)<<48|
538 (uint64_t)*((
const uint8_t *)(p)+1)<<40|
539 (uint64_t)*((
const uint8_t *)(p)+2)<<32|
540 (uint64_t)*((
const uint8_t *)(p)+3)<<24|
541 (uint64_t)*((
const uint8_t *)(p)+4)<<16|
542 (uint64_t)*((
const uint8_t *)(p)+5)<<8|
543 (uint64_t)*((
const uint8_t *)(p)+6)<<0;
554static inline uint32_t pletohu24(
const void *p)
556 return (uint32_t)*((
const uint8_t *)(p)+2)<<16|
557 (uint32_t)*((
const uint8_t *)(p)+1)<<8|
558 (uint32_t)*((
const uint8_t *)(p)+0)<<0;
569static inline uint64_t pletohu40(
const void *p)
571 return (uint64_t)*((
const uint8_t *)(p)+4)<<32|
572 (uint64_t)*((
const uint8_t *)(p)+3)<<24|
573 (uint64_t)*((
const uint8_t *)(p)+2)<<16|
574 (uint64_t)*((
const uint8_t *)(p)+1)<<8|
575 (uint64_t)*((
const uint8_t *)(p)+0)<<0;
586static inline uint64_t pletohu48(
const void *p)
588 return (uint64_t)*((
const uint8_t *)(p)+5)<<40|
589 (uint64_t)*((
const uint8_t *)(p)+4)<<32|
590 (uint64_t)*((
const uint8_t *)(p)+3)<<24|
591 (uint64_t)*((
const uint8_t *)(p)+2)<<16|
592 (uint64_t)*((
const uint8_t *)(p)+1)<<8|
593 (uint64_t)*((
const uint8_t *)(p)+0)<<0;
603static inline uint64_t pletohu56(
const void *p)
605 return (uint64_t)*((
const uint8_t *)(p)+6)<<48|
606 (uint64_t)*((
const uint8_t *)(p)+5)<<40|
607 (uint64_t)*((
const uint8_t *)(p)+4)<<32|
608 (uint64_t)*((
const uint8_t *)(p)+3)<<24|
609 (uint64_t)*((
const uint8_t *)(p)+2)<<16|
610 (uint64_t)*((
const uint8_t *)(p)+1)<<8|
611 (uint64_t)*((
const uint8_t *)(p)+0)<<0;
621static inline void phtonu24(uint8_t *p, uint32_t v)
623 p[0] = (uint8_t)((v) >> 16);
624 p[1] = (uint8_t)((v) >> 8);
625 p[2] = (uint8_t)((v) >> 0);
635static inline void phtonu40(uint8_t *p, uint64_t v)
637 p[0] = (uint8_t)((v) >> 32);
638 p[1] = (uint8_t)((v) >> 24);
639 p[2] = (uint8_t)((v) >> 16);
640 p[3] = (uint8_t)((v) >> 8);
641 p[4] = (uint8_t)((v) >> 0);
651static inline void phtonu48(uint8_t *p, uint64_t v)
653 p[0] = (uint8_t)((v) >> 40);
654 p[1] = (uint8_t)((v) >> 32);
655 p[2] = (uint8_t)((v) >> 24);
656 p[3] = (uint8_t)((v) >> 16);
657 p[4] = (uint8_t)((v) >> 8);
658 p[5] = (uint8_t)((v) >> 0);
668static inline void phtonu56(uint8_t *p, uint64_t v)
670 p[0] = (uint8_t)((v) >> 48);
671 p[1] = (uint8_t)((v) >> 40);
672 p[2] = (uint8_t)((v) >> 32);
673 p[3] = (uint8_t)((v) >> 24);
674 p[4] = (uint8_t)((v) >> 16);
675 p[5] = (uint8_t)((v) >> 8);
676 p[6] = (uint8_t)((v) >> 0);
686static inline void phtoleu24(uint8_t *p, uint32_t v)
688 p[0] = (uint8_t)((v) >> 0);
689 p[1] = (uint8_t)((v) >> 8);
690 p[2] = (uint8_t)((v) >> 16);
700static inline void phtoleu40(uint8_t *p, uint64_t v)
702 p[0] = (uint8_t)((v) >> 0);
703 p[1] = (uint8_t)((v) >> 8);
704 p[2] = (uint8_t)((v) >> 16);
705 p[3] = (uint8_t)((v) >> 24);
706 p[4] = (uint8_t)((v) >> 32);
716static inline void phtoleu48(uint8_t *p, uint64_t v)
718 p[0] = (uint8_t)((v) >> 0);
719 p[1] = (uint8_t)((v) >> 8);
720 p[2] = (uint8_t)((v) >> 16);
721 p[3] = (uint8_t)((v) >> 24);
722 p[4] = (uint8_t)((v) >> 32);
723 p[5] = (uint8_t)((v) >> 40);
733static inline void phtoleu56(uint8_t *p, uint64_t v)
735 p[0] = (uint8_t)((v) >> 0);
736 p[1] = (uint8_t)((v) >> 8);
737 p[2] = (uint8_t)((v) >> 16);
738 p[3] = (uint8_t)((v) >> 24);
739 p[4] = (uint8_t)((v) >> 32);
740 p[5] = (uint8_t)((v) >> 40);
741 p[6] = (uint8_t)((v) >> 48);