23 #ifndef __CLRX_MEMACCESS_H__
24 #define __CLRX_MEMACCESS_H__
26 #include <CLRX/Config.h>
34 inline uint8_t
BEV(uint8_t t);
36 inline int8_t
BEV(int8_t t);
39 inline uint16_t
BEV(uint16_t t);
41 inline int16_t
BEV(int16_t t);
44 inline uint32_t
BEV(uint32_t t);
46 inline int32_t
BEV(int32_t t);
49 inline uint64_t
BEV(uint64_t t);
51 inline int64_t
BEV(int64_t t);
54 inline uint8_t
UBEV(
const uint8_t& t);
56 inline int8_t
UBEV(
const int8_t& t);
59 inline uint16_t
UBEV(
const uint16_t& t);
61 inline int16_t
UBEV(
const int16_t& t);
64 inline uint32_t
UBEV(
const uint32_t& t);
66 inline int32_t
UBEV(
const int32_t& t);
69 inline uint64_t
UBEV(
const uint64_t& t);
71 inline int64_t
UBEV(
const int64_t& t);
74 inline uint8_t
LEV(uint8_t t);
76 inline int8_t
LEV(int8_t t);
79 inline uint16_t
LEV(uint16_t t);
81 inline int16_t
LEV(int16_t t);
84 inline uint32_t
LEV(uint32_t t);
86 inline int32_t
LEV(int32_t t);
89 inline uint64_t
LEV(uint64_t t);
91 inline int64_t
LEV(int64_t t);
94 inline uint8_t
ULEV(
const uint8_t& t);
96 inline int8_t
ULEV(
const int8_t& t);
98 inline uint16_t
ULEV(
const uint16_t& t);
100 inline int16_t
ULEV(
const int16_t& t);
102 inline uint32_t
ULEV(
const uint32_t& t);
104 inline int32_t
ULEV(
const int32_t& t);
106 inline uint64_t
ULEV(
const uint64_t& t);
108 inline int64_t
ULEV(
const int64_t& t);
111 inline void SBEV(uint8_t& r, uint8_t v);
113 inline void SBEV(int8_t& r, int8_t v);
116 inline void SBEV(uint16_t& r, uint16_t v);
118 inline void SBEV(int16_t& r, int16_t v);
121 inline void SBEV(uint32_t& r, uint32_t v);
123 inline void SBEV(int32_t& r, int32_t v);
126 inline void SBEV(uint64_t& r, uint64_t v);
128 inline void SBEV(int64_t& r, int64_t v);
131 inline void SUBEV(uint16_t& r, uint16_t v);
133 inline void SUBEV(int16_t& r, int16_t v);
136 inline void SUBEV(uint32_t& r, uint32_t v);
138 inline void SUBEV(int32_t& r, int32_t v);
141 inline void SUBEV(uint64_t& r, uint64_t v);
143 inline void SUBEV(int64_t& r, int64_t v);
146 inline void SLEV(uint8_t& r, uint8_t v);
148 inline void SLEV(int8_t& r, int8_t v);
151 inline void SLEV(uint16_t& r, uint16_t v);
153 inline void SLEV(int16_t& r, int16_t v);
156 inline void SLEV(uint32_t& r, uint32_t v);
158 inline void SLEV(int32_t& r, int32_t v);
161 inline void SLEV(uint64_t& r, uint64_t v);
163 inline void SLEV(int64_t& r, int64_t v);
166 inline void SULEV(uint8_t& r, uint8_t v);
168 inline void SULEV(int8_t& r, int8_t v);
171 inline void SULEV(uint16_t& r, uint16_t v);
173 inline void SULEV(int16_t& r, int16_t v);
176 inline void SULEV(uint32_t& r, uint32_t v);
178 inline void SULEV(int32_t& r, int32_t v);
181 inline void SULEV(uint64_t& r, uint64_t v);
183 inline void SULEV(int64_t& r, int64_t v);
187 inline uint16_t
BSWAP16(uint16_t v)
189 {
return __builtin_bswap16(v); }
191 inline uint32_t
BSWAP32(uint32_t v)
192 {
return __builtin_bswap32(v); }
194 inline uint64_t
BSWAP64(uint64_t v)
195 {
return __builtin_bswap64(v); }
197 inline uint16_t
BSWAP16(uint16_t v)
199 {
return (v>>8)|(v<<8); }
202 {
return (v>>24)|((v&0xff0000)>>8)|((v&0xff00)<<8)|(v<<24); }
205 {
return (v>>56)|((v&0xff000000000000ULL)>>40)|((v&0xff0000000000ULL)>>24)|
206 ((v&0xff00000000ULL)>>8)|((v&0xff000000ULL)<<8)|((v&0xff0000ULL)<<24)|
207 ((v&0xff00ULL)<<40)|(v<<56); }
211 inline uint8_t
BEV(uint8_t t)
214 inline int8_t
BEV(int8_t t)
218 inline uint8_t
LEV(uint8_t t)
221 inline int8_t
LEV(int8_t t)
239 inline void SBEV(uint8_t& r, uint8_t v)
242 inline void SBEV(int8_t& r, int8_t v)
246 inline void SLEV(uint8_t& r, uint8_t v)
249 inline void SLEV(int8_t& r, int8_t v)
253 inline void SUBEV(uint8_t& r, uint8_t v)
256 inline void SUBEV(int8_t& r, int8_t v)
260 inline void SULEV(uint8_t& r, uint8_t v)
263 inline void SULEV(int8_t& r, int8_t v)
266 #ifdef HAVE_LITTLE_ENDIAN
269 inline uint16_t
BEV(uint16_t t)
272 inline int16_t
BEV(int16_t t)
276 inline uint32_t
BEV(uint32_t t)
279 inline int32_t
BEV(int32_t t)
283 inline uint64_t
BEV(uint64_t t)
286 inline int64_t
BEV(int64_t t)
290 inline uint16_t
UBEV(
const uint16_t& t)
293 inline int16_t
UBEV(
const int16_t& t)
296 # ifdef HAVE_ARCH_ARM32
297 inline uint32_t
UBEV(
const uint32_t& t)
300 const uint16_t* tp = (
const uint16_t*)&t;
304 inline int32_t
UBEV(
const int32_t& t)
306 const uint16_t* tp = (
const uint16_t*)&t;
311 inline uint64_t
UBEV(
const uint64_t& t)
313 const uint16_t* tp = (
const uint16_t*)&t;
319 inline int64_t
UBEV(
const int64_t& t)
321 const uint16_t* tp = (
const uint16_t*)&t;
326 inline uint32_t
UBEV(
const uint32_t& t)
330 inline int32_t
UBEV(
const int32_t& t)
334 inline uint64_t
UBEV(
const uint64_t& t)
337 inline int64_t
UBEV(
const int64_t& t)
342 inline uint16_t
LEV(uint16_t t)
345 inline int16_t
LEV(int16_t t)
349 inline uint32_t
LEV(uint32_t t)
352 inline int32_t
LEV(int32_t t)
356 inline uint64_t
LEV(uint64_t t)
359 inline int64_t
LEV(int64_t t)
363 inline uint16_t
ULEV(
const uint16_t& t)
366 inline int16_t
ULEV(
const int16_t& t)
369 # ifdef HAVE_ARCH_ARM32
370 inline uint32_t
ULEV(
const uint32_t& t)
373 const uint16_t* tp = (
const uint16_t*)&t;
374 return tp[0] | (uint32_t(tp[1])<<16);
377 inline int32_t
ULEV(
const int32_t& t)
379 const uint16_t* tp = (
const uint16_t*)&t;
380 return tp[0] | (uint32_t(tp[1])<<16);
384 inline uint64_t
ULEV(
const uint64_t& t)
386 const uint16_t* tp = (
const uint16_t*)&t;
387 return tp[0] | (uint64_t(tp[1])<<16) | (uint64_t(tp[2])<<32) |
388 (uint64_t(tp[3])<<48);
392 inline int64_t
ULEV(
const int64_t& t)
394 const uint16_t* tp = (
const uint16_t*)&t;
395 return tp[0] | (uint64_t(tp[1])<<16) | (uint64_t(tp[2])<<32) |
396 (uint64_t(tp[3])<<48);
399 inline uint32_t
ULEV(
const uint32_t& t)
403 inline int32_t
ULEV(
const int32_t& t)
407 inline uint64_t
ULEV(
const uint64_t& t)
410 inline int64_t
ULEV(
const int64_t& t)
415 inline void SBEV(uint16_t& r, uint16_t v)
418 inline void SBEV(int16_t& r, int16_t v)
422 inline void SBEV(uint32_t& r, uint32_t v)
425 inline void SBEV(int32_t& r, int32_t v)
429 inline void SBEV(uint64_t& r, uint64_t v)
432 inline void SBEV(int64_t& r, int64_t v)
436 inline void SUBEV(uint16_t& r, uint16_t v)
439 inline void SUBEV(int16_t& r, int16_t v)
442 # ifdef HAVE_ARCH_ARM32
443 inline void SUBEV(uint32_t& r, uint32_t v)
446 uint16_t* rp = (uint16_t*)&r;
447 rp[0] =
BSWAP16(uint16_t(v>>16));
451 inline void SUBEV(int32_t& r, int32_t v)
453 uint16_t* rp = (uint16_t*)&r;
454 rp[0] =
BSWAP16(uint16_t(v>>16));
459 inline void SUBEV(uint64_t& r, uint64_t v)
461 uint16_t* rp = (uint16_t*)&r;
462 rp[0] =
BSWAP16(uint16_t(v>>48));
463 rp[1] =
BSWAP16(uint16_t(v>>32));
464 rp[2] =
BSWAP16(uint16_t(v>>16));
468 inline void SUBEV(int64_t& r, int64_t v)
470 uint16_t* rp = (uint16_t*)&r;
471 rp[0] =
BSWAP16(uint16_t(v>>48));
472 rp[1] =
BSWAP16(uint16_t(v>>32));
473 rp[2] =
BSWAP16(uint16_t(v>>16));
477 inline void SUBEV(uint32_t& r, uint32_t v)
481 inline void SUBEV(int32_t& r, int32_t v)
485 inline void SUBEV(uint64_t& r, uint64_t v)
488 inline void SUBEV(int64_t& r, int64_t v)
494 inline void SLEV(uint16_t& r, uint16_t v)
497 inline void SLEV(int16_t& r, int16_t v)
501 inline void SLEV(uint32_t& r, uint32_t v)
504 inline void SLEV(int32_t& r, int32_t v)
508 inline void SLEV(uint64_t& r, uint64_t v)
511 inline void SLEV(int64_t& r, int64_t v)
515 inline void SULEV(uint16_t& r, uint16_t v)
518 inline void SULEV(int16_t& r, int16_t v)
521 # ifdef HAVE_ARCH_ARM32
522 inline void SULEV(uint32_t& r, uint32_t v)
525 uint16_t* rp = (uint16_t*)&r;
527 rp[1] = uint16_t(v>>16);
530 inline void SULEV(int32_t& r, int32_t v)
532 uint16_t* rp = (uint16_t*)&r;
534 rp[1] = uint16_t(v>>16);
538 inline void SULEV(uint64_t& r, uint64_t v)
540 uint16_t* rp = (uint16_t*)&r;
542 rp[1] = uint16_t(v>>16);
543 rp[2] = uint16_t(v>>32);
544 rp[3] = uint16_t(v>>48);
547 inline void SULEV(int64_t& r, int64_t v)
549 uint16_t* rp = (uint16_t*)&r;
551 rp[1] = uint16_t(v>>16);
552 rp[2] = uint16_t(v>>32);
553 rp[3] = uint16_t(v>>48);
556 inline void SULEV(uint32_t& r, uint32_t v)
560 inline void SULEV(int32_t& r, int32_t v)
564 inline void SULEV(uint64_t& r, uint64_t v)
567 inline void SULEV(int64_t& r, int64_t v)
574 inline uint16_t
BEV(uint16_t t)
577 inline int16_t
BEV(int16_t t)
581 inline uint32_t
BEV(uint32_t t)
584 inline int32_t
BEV(int32_t t)
588 inline uint64_t
BEV(uint64_t t)
591 inline int64_t
BEV(int64_t t)
596 inline uint16_t
UBEV(
const uint16_t& t)
599 inline int16_t
UBEV(
const int16_t& t)
602 # ifdef HAVE_ARCH_ARM32
603 inline uint32_t
UBEV(
const uint32_t& t)
606 const uint16_t* tp = (
const uint16_t*)&t;
607 return tp[1] | (uint32_t(tp[0])<<16);
610 inline int32_t
UBEV(
const int32_t& t)
612 const uint16_t* tp = (
const uint16_t*)&t;
613 return tp[1] | (uint32_t(tp[0])<<16);
617 inline uint64_t
UBEV(
const uint64_t& t)
619 const uint16_t* tp = (
const uint16_t*)&t;
620 return tp[3] | (uint64_t(tp[2])<<16) | (uint64_t(tp[1])<<32) |
621 (uint64_t(tp[0])<<48);
625 inline int64_t
UBEV(
const int64_t& t)
627 const uint16_t* tp = (
const uint16_t*)&t;
628 return tp[3] | (uint64_t(tp[2])<<16) | (uint64_t(tp[1])<<32) |
629 (uint64_t(tp[0])<<48);
632 inline uint32_t
UBEV(
const uint32_t& t)
636 inline int32_t
UBEV(
const int32_t& t)
640 inline uint64_t
UBEV(
const uint64_t& t)
643 inline int64_t
UBEV(
const int64_t& t)
648 inline uint16_t
LEV(uint16_t t)
651 inline int16_t
LEV(int16_t t)
655 inline uint32_t
LEV(uint32_t t)
658 inline int32_t
LEV(int32_t t)
662 inline uint64_t
LEV(uint64_t t)
665 inline int64_t
LEV(int64_t t)
669 inline uint16_t
ULEV(
const uint16_t& t)
672 inline int16_t
ULEV(
const int16_t& t)
675 # ifdef HAVE_ARCH_ARM32
676 inline uint32_t
ULEV(
const uint32_t& t)
679 const uint16_t* tp = (
const uint16_t*)&t;
683 inline int32_t
ULEV(
const int32_t& t)
685 const uint16_t* tp = (
const uint16_t*)&t;
690 inline uint64_t
ULEV(
const uint64_t& t)
692 const uint16_t* tp = (
const uint16_t*)&t;
698 inline int64_t
ULEV(
const int64_t& t)
700 const uint16_t* tp = (
const uint16_t*)&t;
705 inline uint32_t
ULEV(
const uint32_t& t)
709 inline int32_t
ULEV(
const int32_t& t)
713 inline uint64_t
ULEV(
const uint64_t& t)
716 inline int64_t
ULEV(
const int64_t& t)
722 inline void SBEV(uint16_t& r, uint16_t v)
725 inline void SBEV(int16_t& r, int16_t v)
729 inline void SBEV(uint32_t& r, uint32_t v)
732 inline void SBEV(int32_t& r, int32_t v)
736 inline void SBEV(uint64_t& r, uint64_t v)
739 inline void SBEV(int64_t& r, int64_t v)
743 inline void SUBEV(uint16_t& r, uint16_t v)
746 inline void SUBEV(int16_t& r, int16_t v)
749 # ifdef HAVE_ARCH_ARM32
750 inline void SUBEV(uint32_t& r, uint32_t v)
753 uint16_t* rp = (uint16_t*)&r;
755 rp[0] = uint16_t(v>>16);
758 inline void SUBEV(int32_t& r, int32_t v)
760 uint16_t* rp = (uint16_t*)&r;
762 rp[0] = uint16_t(v>>16);
766 inline void SUBEV(uint64_t& r, uint64_t v)
768 uint16_t* rp = (uint16_t*)&r;
770 rp[2] = uint16_t(v>>16);
771 rp[1] = uint16_t(v>>32);
772 rp[0] = uint16_t(v>>48);
775 inline void SUBEV(int64_t& r, int64_t v)
777 uint16_t* rp = (uint16_t*)&r;
779 rp[2] = uint16_t(v>>16);
780 rp[1] = uint16_t(v>>32);
781 rp[0] = uint16_t(v>>48);
784 inline void SUBEV(uint32_t& r, uint32_t v)
788 inline void SUBEV(int32_t& r, int32_t v)
792 inline void SUBEV(uint64_t& r, uint64_t v)
795 inline void SUBEV(int64_t& r, int64_t v)
801 inline void SLEV(uint16_t& r, uint16_t v)
804 inline void SLEV(int16_t& r, int16_t v)
808 inline void SLEV(uint32_t& r, uint32_t v)
811 inline void SLEV(int32_t& r, int32_t v)
815 inline void SLEV(uint64_t& r, uint64_t v)
818 inline void SLEV(int64_t& r, int64_t v)
822 inline void SULEV(uint16_t& r, uint16_t v)
825 inline void SULEV(int16_t& r, int16_t v)
828 # ifdef HAVE_ARCH_ARM32
829 inline void SULEV(uint32_t& r, uint32_t v)
832 uint16_t* rp = (uint16_t*)&r;
833 rp[1] =
BSWAP16(uint16_t(v>>16));
837 inline void SULEV(int32_t& r, int32_t v)
839 uint16_t* rp = (uint16_t*)&r;
840 rp[1] =
BSWAP16(uint16_t(v>>16));
845 inline void SULEV(uint64_t& r, uint64_t v)
847 uint16_t* rp = (uint16_t*)&r;
848 rp[3] =
BSWAP16(uint16_t(v>>48));
849 rp[2] =
BSWAP16(uint16_t(v>>32));
850 rp[1] =
BSWAP16(uint16_t(v>>16));
854 inline void SULEV(int64_t& r, int64_t v)
856 uint16_t* rp = (uint16_t*)&r;
857 rp[3] =
BSWAP16(uint16_t(v>>48));
858 rp[2] =
BSWAP16(uint16_t(v>>32));
859 rp[1] =
BSWAP16(uint16_t(v>>16));
863 inline void SULEV(uint32_t& r, uint32_t v)
867 inline void SULEV(int32_t& r, int32_t v)
871 inline void SULEV(uint64_t& r, uint64_t v)
874 inline void SULEV(int64_t& r, int64_t v)
uint8_t UBEV(const uint8_t &t)
convert from/to big endian value from unaligned memory
uint8_t LEV(uint8_t t)
convert from/to little endian value
Definition: MemAccess.h:218
uint16_t BSWAP16(uint16_t v)
BSWAP 16-bit.
Definition: MemAccess.h:198
uint8_t BEV(uint8_t t)
convert from/to big endian value
Definition: MemAccess.h:211
void SUBEV(uint16_t &r, uint16_t v)
save from/to big endian value to unaligned memory
Definition: MemAccess.h:743
uint32_t BSWAP32(uint32_t v)
BSWAP 32-bit.
Definition: MemAccess.h:201
uint64_t BSWAP64(uint64_t v)
BSWAP 64-bit.
Definition: MemAccess.h:204
void SLEV(uint8_t &r, uint8_t v)
save from/to little endian value
Definition: MemAccess.h:246
void SBEV(uint8_t &r, uint8_t v)
save from/to big endian value
Definition: MemAccess.h:239
void SULEV(uint8_t &r, uint8_t v)
save from/to little endian value to unaligned memory
Definition: MemAccess.h:260
uint8_t ULEV(const uint8_t &t)
convert from/to little endian value from unaligned memory