CLRX  1
An unofficial OpenCL extensions designed for Radeon GPUs
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros
MemAccess.h
Go to the documentation of this file.
1 /*
2  * CLRadeonExtender - Unofficial OpenCL Radeon Extensions Library
3  * Copyright (C) 2014-2016 Mateusz Szpakowski
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Lesser General Public
7  * License as published by the Free Software Foundation; either
8  * version 2.1 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13  * Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public
16  * License along with this library; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18  */
23 #ifndef __CLRX_MEMACCESS_H__
24 #define __CLRX_MEMACCESS_H__
25 
26 #include <CLRX/Config.h>
27 #include <cstdint>
28 
30 namespace CLRX
31 {
32 
34 inline uint8_t BEV(uint8_t t);
36 inline int8_t BEV(int8_t t);
37 
39 inline uint16_t BEV(uint16_t t);
41 inline int16_t BEV(int16_t t);
42 
44 inline uint32_t BEV(uint32_t t);
46 inline int32_t BEV(int32_t t);
47 
49 inline uint64_t BEV(uint64_t t);
51 inline int64_t BEV(int64_t t);
52 
54 inline uint8_t UBEV(const uint8_t& t);
56 inline int8_t UBEV(const int8_t& t);
57 
59 inline uint16_t UBEV(const uint16_t& t);
61 inline int16_t UBEV(const int16_t& t);
62 
64 inline uint32_t UBEV(const uint32_t& t);
66 inline int32_t UBEV(const int32_t& t);
67 
69 inline uint64_t UBEV(const uint64_t& t);
71 inline int64_t UBEV(const int64_t& t);
72 
74 inline uint8_t LEV(uint8_t t);
76 inline int8_t LEV(int8_t t);
77 
79 inline uint16_t LEV(uint16_t t);
81 inline int16_t LEV(int16_t t);
82 
84 inline uint32_t LEV(uint32_t t);
86 inline int32_t LEV(int32_t t);
87 
89 inline uint64_t LEV(uint64_t t);
91 inline int64_t LEV(int64_t t);
92 
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);
109 
111 inline void SBEV(uint8_t& r, uint8_t v);
113 inline void SBEV(int8_t& r, int8_t v);
114 
116 inline void SBEV(uint16_t& r, uint16_t v);
118 inline void SBEV(int16_t& r, int16_t v);
119 
121 inline void SBEV(uint32_t& r, uint32_t v);
123 inline void SBEV(int32_t& r, int32_t v);
124 
126 inline void SBEV(uint64_t& r, uint64_t v);
128 inline void SBEV(int64_t& r, int64_t v);
129 
131 inline void SUBEV(uint16_t& r, uint16_t v);
133 inline void SUBEV(int16_t& r, int16_t v);
134 
136 inline void SUBEV(uint32_t& r, uint32_t v);
138 inline void SUBEV(int32_t& r, int32_t v);
139 
141 inline void SUBEV(uint64_t& r, uint64_t v);
143 inline void SUBEV(int64_t& r, int64_t v);
144 
146 inline void SLEV(uint8_t& r, uint8_t v);
148 inline void SLEV(int8_t& r, int8_t v);
149 
151 inline void SLEV(uint16_t& r, uint16_t v);
153 inline void SLEV(int16_t& r, int16_t v);
154 
156 inline void SLEV(uint32_t& r, uint32_t v);
158 inline void SLEV(int32_t& r, int32_t v);
159 
161 inline void SLEV(uint64_t& r, uint64_t v);
163 inline void SLEV(int64_t& r, int64_t v);
164 
166 inline void SULEV(uint8_t& r, uint8_t v);
168 inline void SULEV(int8_t& r, int8_t v);
169 
171 inline void SULEV(uint16_t& r, uint16_t v);
173 inline void SULEV(int16_t& r, int16_t v);
174 
176 inline void SULEV(uint32_t& r, uint32_t v);
178 inline void SULEV(int32_t& r, int32_t v);
179 
181 inline void SULEV(uint64_t& r, uint64_t v);
183 inline void SULEV(int64_t& r, int64_t v);
184 
185 
186 #ifdef __GNUC__
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); }
196 #else
197 inline uint16_t BSWAP16(uint16_t v)
199 { return (v>>8)|(v<<8); }
201 inline uint32_t BSWAP32(uint32_t v)
202 { return (v>>24)|((v&0xff0000)>>8)|((v&0xff00)<<8)|(v<<24); }
204 inline uint64_t BSWAP64(uint64_t v)
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); }
208 #endif
209 
211 inline uint8_t BEV(uint8_t t)
212 { return t; }
214 inline int8_t BEV(int8_t t)
215 { return t; }
216 
218 inline uint8_t LEV(uint8_t t)
219 { return t; }
221 inline int8_t LEV(int8_t t)
222 { return t; }
223 
225 inline uint8_t UBEV(uint8_t t)
226 { return t; }
228 inline int8_t UBEV(int8_t t)
229 { return t; }
230 
232 inline uint8_t ULEV(uint8_t t)
233 { return t; }
235 inline int8_t ULEV(int8_t t)
236 { return t; }
237 
239 inline void SBEV(uint8_t& r, uint8_t v)
240 { r = v; }
242 inline void SBEV(int8_t& r, int8_t v)
243 { r = v; }
244 
246 inline void SLEV(uint8_t& r, uint8_t v)
247 { r = v; }
249 inline void SLEV(int8_t& r, int8_t v)
250 { r = v; }
251 
253 inline void SUBEV(uint8_t& r, uint8_t v)
254 { r = v; }
256 inline void SUBEV(int8_t& r, int8_t v)
257 { r = v; }
258 
260 inline void SULEV(uint8_t& r, uint8_t v)
261 { r = v; }
263 inline void SULEV(int8_t& r, int8_t v)
264 { r = v; }
265 
266 #ifdef HAVE_LITTLE_ENDIAN
267 
269 inline uint16_t BEV(uint16_t t)
270 { return BSWAP16(t); }
272 inline int16_t BEV(int16_t t)
273 { return BSWAP16(t); }
274 
276 inline uint32_t BEV(uint32_t t)
277 { return BSWAP32(t); }
279 inline int32_t BEV(int32_t t)
280 { return BSWAP32(t); }
281 
283 inline uint64_t BEV(uint64_t t)
284 { return BSWAP64(t); }
286 inline int64_t BEV(int64_t t)
287 { return BSWAP64(t); }
288 
290 inline uint16_t UBEV(const uint16_t& t)
291 { return BSWAP16(t); }
293 inline int16_t UBEV(const int16_t& t)
294 { return BSWAP16(t); }
295 
296 # ifdef HAVE_ARCH_ARM32
297 inline uint32_t UBEV(const uint32_t& t)
299 {
300  const uint16_t* tp = (const uint16_t*)&t;
301  return BSWAP16(tp[1]) | (uint32_t(BSWAP16(tp[0]))<<16);
302 }
304 inline int32_t UBEV(const int32_t& t)
305 {
306  const uint16_t* tp = (const uint16_t*)&t;
307  return BSWAP16(tp[1]) | (uint32_t(BSWAP16(tp[0]))<<16);
308 }
309 
311 inline uint64_t UBEV(const uint64_t& t)
312 {
313  const uint16_t* tp = (const uint16_t*)&t;
314  return BSWAP16(tp[3]) | (uint64_t(BSWAP16(tp[2]))<<16) |
315  (uint64_t(BSWAP16(tp[1]))<<32) | (uint64_t(BSWAP16(tp[0]))<<48);
316 }
317 
319 inline int64_t UBEV(const int64_t& t)
320 {
321  const uint16_t* tp = (const uint16_t*)&t;
322  return BSWAP16(tp[3]) | (uint64_t(BSWAP16(tp[2]))<<16) |
323  (uint64_t(BSWAP16(tp[1]))<<32) | (uint64_t(BSWAP16(tp[0]))<<48);
324 }
325 # else
326 inline uint32_t UBEV(const uint32_t& t)
328 { return BSWAP32(t); }
330 inline int32_t UBEV(const int32_t& t)
331 { return BSWAP32(t); }
332 
334 inline uint64_t UBEV(const uint64_t& t)
335 { return BSWAP64(t); }
337 inline int64_t UBEV(const int64_t& t)
338 { return BSWAP64(t); }
339 # endif
340 
342 inline uint16_t LEV(uint16_t t)
343 { return t; }
345 inline int16_t LEV(int16_t t)
346 { return t; }
347 
349 inline uint32_t LEV(uint32_t t)
350 { return t; }
352 inline int32_t LEV(int32_t t)
353 { return t; }
354 
356 inline uint64_t LEV(uint64_t t)
357 { return t; }
359 inline int64_t LEV(int64_t t)
360 { return t; }
361 
363 inline uint16_t ULEV(const uint16_t& t)
364 { return t; }
366 inline int16_t ULEV(const int16_t& t)
367 { return t; }
368 
369 # ifdef HAVE_ARCH_ARM32
370 inline uint32_t ULEV(const uint32_t& t)
372 {
373  const uint16_t* tp = (const uint16_t*)&t;
374  return tp[0] | (uint32_t(tp[1])<<16);
375 }
377 inline int32_t ULEV(const int32_t& t)
378 {
379  const uint16_t* tp = (const uint16_t*)&t;
380  return tp[0] | (uint32_t(tp[1])<<16);
381 }
382 
384 inline uint64_t ULEV(const uint64_t& t)
385 {
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);
389 }
390 
392 inline int64_t ULEV(const int64_t& t)
393 {
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);
397 }
398 # else
399 inline uint32_t ULEV(const uint32_t& t)
401 { return t; }
403 inline int32_t ULEV(const int32_t& t)
404 { return t; }
405 
407 inline uint64_t ULEV(const uint64_t& t)
408 { return t; }
410 inline int64_t ULEV(const int64_t& t)
411 { return t; }
412 # endif
413 
415 inline void SBEV(uint16_t& r, uint16_t v)
416 { r = BSWAP16(v); }
418 inline void SBEV(int16_t& r, int16_t v)
419 { r = BSWAP16(v); }
420 
422 inline void SBEV(uint32_t& r, uint32_t v)
423 { r = BSWAP32(v); }
425 inline void SBEV(int32_t& r, int32_t v)
426 { r = BSWAP32(v); }
427 
429 inline void SBEV(uint64_t& r, uint64_t v)
430 { r = BSWAP64(v); }
432 inline void SBEV(int64_t& r, int64_t v)
433 { r = BSWAP64(v); }
434 
436 inline void SUBEV(uint16_t& r, uint16_t v)
437 { r = BSWAP16(v); }
439 inline void SUBEV(int16_t& r, int16_t v)
440 { r = BSWAP16(v); }
441 
442 # ifdef HAVE_ARCH_ARM32
443 inline void SUBEV(uint32_t& r, uint32_t v)
445 {
446  uint16_t* rp = (uint16_t*)&r;
447  rp[0] = BSWAP16(uint16_t(v>>16));
448  rp[1] = BSWAP16(uint16_t(v));
449 }
451 inline void SUBEV(int32_t& r, int32_t v)
452 {
453  uint16_t* rp = (uint16_t*)&r;
454  rp[0] = BSWAP16(uint16_t(v>>16));
455  rp[1] = BSWAP16(uint16_t(v));
456 }
457 
459 inline void SUBEV(uint64_t& r, uint64_t v)
460 {
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));
465  rp[3] = BSWAP16(uint16_t(v));
466 }
468 inline void SUBEV(int64_t& r, int64_t v)
469 {
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));
474  rp[3] = BSWAP16(uint16_t(v));
475 }
476 # else
477 inline void SUBEV(uint32_t& r, uint32_t v)
479 { r = BSWAP32(v); }
481 inline void SUBEV(int32_t& r, int32_t v)
482 { r = BSWAP32(v); }
483 
485 inline void SUBEV(uint64_t& r, uint64_t v)
486 { r = BSWAP64(v); }
488 inline void SUBEV(int64_t& r, int64_t v)
489 { r = BSWAP64(v); }
490 # endif
491 
492 
494 inline void SLEV(uint16_t& r, uint16_t v)
495 { r = v; }
497 inline void SLEV(int16_t& r, int16_t v)
498 { r = v; }
499 
501 inline void SLEV(uint32_t& r, uint32_t v)
502 { r = v; }
504 inline void SLEV(int32_t& r, int32_t v)
505 { r = v; }
506 
508 inline void SLEV(uint64_t& r, uint64_t v)
509 { r = v; }
511 inline void SLEV(int64_t& r, int64_t v)
512 { r = v; }
513 
515 inline void SULEV(uint16_t& r, uint16_t v)
516 { r = v; }
518 inline void SULEV(int16_t& r, int16_t v)
519 { r = v; }
520 
521 # ifdef HAVE_ARCH_ARM32
522 inline void SULEV(uint32_t& r, uint32_t v)
524 {
525  uint16_t* rp = (uint16_t*)&r;
526  rp[0] = uint16_t(v);
527  rp[1] = uint16_t(v>>16);
528 }
530 inline void SULEV(int32_t& r, int32_t v)
531 {
532  uint16_t* rp = (uint16_t*)&r;
533  rp[0] = uint16_t(v);
534  rp[1] = uint16_t(v>>16);
535 }
536 
538 inline void SULEV(uint64_t& r, uint64_t v)
539 {
540  uint16_t* rp = (uint16_t*)&r;
541  rp[0] = uint16_t(v);
542  rp[1] = uint16_t(v>>16);
543  rp[2] = uint16_t(v>>32);
544  rp[3] = uint16_t(v>>48);
545 }
547 inline void SULEV(int64_t& r, int64_t v)
548 {
549  uint16_t* rp = (uint16_t*)&r;
550  rp[0] = uint16_t(v);
551  rp[1] = uint16_t(v>>16);
552  rp[2] = uint16_t(v>>32);
553  rp[3] = uint16_t(v>>48);
554 }
555 # else
556 inline void SULEV(uint32_t& r, uint32_t v)
558 { r = v; }
560 inline void SULEV(int32_t& r, int32_t v)
561 { r = v; }
562 
564 inline void SULEV(uint64_t& r, uint64_t v)
565 { r = v; }
567 inline void SULEV(int64_t& r, int64_t v)
568 { r = v; }
569 # endif
570 
571 #else // BIG ENDIAN
572 
574 inline uint16_t BEV(uint16_t t)
575 { return t; }
577 inline int16_t BEV(int16_t t)
578 { return t; }
579 
581 inline uint32_t BEV(uint32_t t)
582 { return t; }
584 inline int32_t BEV(int32_t t)
585 { return t; }
586 
588 inline uint64_t BEV(uint64_t t)
589 { return t; }
591 inline int64_t BEV(int64_t t)
592 { return t; }
593 
594 
596 inline uint16_t UBEV(const uint16_t& t)
597 { return t; }
599 inline int16_t UBEV(const int16_t& t)
600 { return t; }
601 
602 # ifdef HAVE_ARCH_ARM32
603 inline uint32_t UBEV(const uint32_t& t)
605 {
606  const uint16_t* tp = (const uint16_t*)&t;
607  return tp[1] | (uint32_t(tp[0])<<16);
608 }
610 inline int32_t UBEV(const int32_t& t)
611 {
612  const uint16_t* tp = (const uint16_t*)&t;
613  return tp[1] | (uint32_t(tp[0])<<16);
614 }
615 
617 inline uint64_t UBEV(const uint64_t& t)
618 {
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);
622 }
623 
625 inline int64_t UBEV(const int64_t& t)
626 {
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);
630 }
631 # else
632 inline uint32_t UBEV(const uint32_t& t)
634 { return t; }
636 inline int32_t UBEV(const int32_t& t)
637 { return t; }
638 
640 inline uint64_t UBEV(const uint64_t& t)
641 { return t; }
643 inline int64_t UBEV(const int64_t& t)
644 { return t; }
645 # endif
646 
648 inline uint16_t LEV(uint16_t t)
649 { return BSWAP16(t); }
651 inline int16_t LEV(int16_t t)
652 { return BSWAP16(t); }
653 
655 inline uint32_t LEV(uint32_t t)
656 { return BSWAP32(t); }
658 inline int32_t LEV(int32_t t)
659 { return BSWAP32(t); }
660 
662 inline uint64_t LEV(uint64_t t)
663 { return BSWAP64(t); }
665 inline int64_t LEV(int64_t t)
666 { return BSWAP64(t); }
667 
669 inline uint16_t ULEV(const uint16_t& t)
670 { return BSWAP16(t); }
672 inline int16_t ULEV(const int16_t& t)
673 { return BSWAP16(t); }
674 
675 # ifdef HAVE_ARCH_ARM32
676 inline uint32_t ULEV(const uint32_t& t)
678 {
679  const uint16_t* tp = (const uint16_t*)&t;
680  return BSWAP16(tp[0]) | (uint32_t(BSWAP16(tp[1]))<<16);
681 }
683 inline int32_t ULEV(const int32_t& t)
684 {
685  const uint16_t* tp = (const uint16_t*)&t;
686  return BSWAP16(tp[0]) | (uint32_t(BSWAP16(tp[1]))<<16);
687 }
688 
690 inline uint64_t ULEV(const uint64_t& t)
691 {
692  const uint16_t* tp = (const uint16_t*)&t;
693  return BSWAP16(tp[0]) | (uint64_t(BSWAP16(tp[1]))<<16) |
694  (uint64_t(BSWAP16(tp[2]))<<32) | (uint64_t(BSWAP16(tp[3]))<<48);
695 }
696 
698 inline int64_t ULEV(const int64_t& t)
699 {
700  const uint16_t* tp = (const uint16_t*)&t;
701  return BSWAP16(tp[0]) | (uint64_t(BSWAP16(tp[1]))<<16) |
702  (uint64_t(BSWAP16(tp[2]))<<32) | (uint64_t(BSWAP16(tp[3]))<<48);
703 }
704 # else
705 inline uint32_t ULEV(const uint32_t& t)
707 { return BSWAP32(t); }
709 inline int32_t ULEV(const int32_t& t)
710 { return BSWAP32(t); }
711 
713 inline uint64_t ULEV(const uint64_t& t)
714 { return BSWAP64(t); }
716 inline int64_t ULEV(const int64_t& t)
717 { return BSWAP64(t); }
718 # endif
719 
720 
722 inline void SBEV(uint16_t& r, uint16_t v)
723 { r = v; }
725 inline void SBEV(int16_t& r, int16_t v)
726 { r = v; }
727 
729 inline void SBEV(uint32_t& r, uint32_t v)
730 { r = v; }
732 inline void SBEV(int32_t& r, int32_t v)
733 { r = v; }
734 
736 inline void SBEV(uint64_t& r, uint64_t v)
737 { r = v; }
739 inline void SBEV(int64_t& r, int64_t v)
740 { r = v; }
741 
743 inline void SUBEV(uint16_t& r, uint16_t v)
744 { r = v; }
746 inline void SUBEV(int16_t& r, int16_t v)
747 { r = v; }
748 
749 # ifdef HAVE_ARCH_ARM32
750 inline void SUBEV(uint32_t& r, uint32_t v)
752 {
753  uint16_t* rp = (uint16_t*)&r;
754  rp[1] = uint16_t(v);
755  rp[0] = uint16_t(v>>16);
756 }
758 inline void SUBEV(int32_t& r, int32_t v)
759 {
760  uint16_t* rp = (uint16_t*)&r;
761  rp[1] = uint16_t(v);
762  rp[0] = uint16_t(v>>16);
763 }
764 
766 inline void SUBEV(uint64_t& r, uint64_t v)
767 {
768  uint16_t* rp = (uint16_t*)&r;
769  rp[3] = uint16_t(v);
770  rp[2] = uint16_t(v>>16);
771  rp[1] = uint16_t(v>>32);
772  rp[0] = uint16_t(v>>48);
773 }
775 inline void SUBEV(int64_t& r, int64_t v)
776 {
777  uint16_t* rp = (uint16_t*)&r;
778  rp[3] = uint16_t(v);
779  rp[2] = uint16_t(v>>16);
780  rp[1] = uint16_t(v>>32);
781  rp[0] = uint16_t(v>>48);
782 }
783 # else
784 inline void SUBEV(uint32_t& r, uint32_t v)
786 { r = v; }
788 inline void SUBEV(int32_t& r, int32_t v)
789 { r = v; }
790 
792 inline void SUBEV(uint64_t& r, uint64_t v)
793 { r = v; }
795 inline void SUBEV(int64_t& r, int64_t v)
796 { r = v; }
797 # endif
798 
799 
801 inline void SLEV(uint16_t& r, uint16_t v)
802 { r = BSWAP16(v); }
804 inline void SLEV(int16_t& r, int16_t v)
805 { r = BSWAP16(v); }
806 
808 inline void SLEV(uint32_t& r, uint32_t v)
809 { r = BSWAP32(v); }
811 inline void SLEV(int32_t& r, int32_t v)
812 { r = BSWAP32(v); }
813 
815 inline void SLEV(uint64_t& r, uint64_t v)
816 { r = BSWAP64(v); }
818 inline void SLEV(int64_t& r, int64_t v)
819 { r = BSWAP64(v); }
820 
822 inline void SULEV(uint16_t& r, uint16_t v)
823 { r = BSWAP16(v); }
825 inline void SULEV(int16_t& r, int16_t v)
826 { r = BSWAP16(v); }
827 
828 # ifdef HAVE_ARCH_ARM32
829 inline void SULEV(uint32_t& r, uint32_t v)
831 {
832  uint16_t* rp = (uint16_t*)&r;
833  rp[1] = BSWAP16(uint16_t(v>>16));
834  rp[0] = BSWAP16(uint16_t(v));
835 }
837 inline void SULEV(int32_t& r, int32_t v)
838 {
839  uint16_t* rp = (uint16_t*)&r;
840  rp[1] = BSWAP16(uint16_t(v>>16));
841  rp[0] = BSWAP16(uint16_t(v));
842 }
843 
845 inline void SULEV(uint64_t& r, uint64_t v)
846 {
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));
851  rp[0] = BSWAP16(uint16_t(v));
852 }
854 inline void SULEV(int64_t& r, int64_t v)
855 {
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));
860  rp[0] = BSWAP16(uint16_t(v));
861 }
862 # else
863 inline void SULEV(uint32_t& r, uint32_t v)
865 { r = BSWAP32(v); }
867 inline void SULEV(int32_t& r, int32_t v)
868 { r = BSWAP32(v); }
869 
871 inline void SULEV(uint64_t& r, uint64_t v)
872 { r = BSWAP64(v); }
874 inline void SULEV(int64_t& r, int64_t v)
875 { r = BSWAP64(v); }
876 # endif
877 
878 #endif
879 
880 };
881 
882 #endif
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