CLRX  1
An unofficial OpenCL extensions designed for Radeon GPUs
MemAccess.h
Go to the documentation of this file.
1 /*
2  * CLRadeonExtender - Unofficial OpenCL Radeon Extensions Library
3  * Copyright (C) 2014-2018 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 
289 # if defined(HAVE_ARCH_SPARCH) || defined(HAVE_ARCH_MIPS) || defined(HAVE_ARCH_IA64)
290 
292 inline uint16_t UBEV(const uint16_t& t)
293 {
294  const uint8_t* tp = (const uint8_t*)&t;
295  return tp[1] | (uint16_t(tp[0])<<8);
296 }
298 inline int16_t UBEV(const int16_t& t)
299 {
300  const uint8_t* tp = (const uint8_t*)&t;
301  return tp[1] | (uint16_t(tp[0])<<8);
302 }
304 inline uint32_t UBEV(const uint32_t& t)
305 {
306  const uint8_t* tp = (const uint8_t*)&t;
307  return tp[3] | (uint32_t(tp[2])<<8) | (uint32_t(tp[1])<<16) | (uint32_t(tp[0])<<24);
308 }
310 inline int32_t UBEV(const int32_t& t)
311 {
312  const uint8_t* tp = (const uint8_t*)&t;
313  return tp[3] | (uint32_t(tp[2])<<8) | (uint32_t(tp[1])<<16) | (uint32_t(tp[0])<<24);
314 }
316 inline uint64_t UBEV(const uint64_t& t)
317 {
318  const uint8_t* tp = (const uint8_t*)&t;
319  return tp[7] | (uint64_t(tp[6])<<8) | (uint64_t(tp[5])<<16) | (uint64_t(tp[4])<<24) |
320  (uint64_t(tp[3])<<32) | (uint64_t(tp[2])<<40) | (uint64_t(tp[1])<<48) |
321  (uint64_t(tp[0])<<56);
322 }
324 inline int64_t UBEV(const int64_t& t)
325 {
326  const uint8_t* tp = (const uint8_t*)&t;
327  return tp[7] | (uint64_t(tp[6])<<8) | (uint64_t(tp[5])<<16) | (uint64_t(tp[4])<<24) |
328  (uint64_t(tp[3])<<32) | (uint64_t(tp[2])<<40) | (uint64_t(tp[1])<<48) |
329  (uint64_t(tp[0])<<56);
330 }
331 
332 # else
333 
335 inline uint16_t UBEV(const uint16_t& t)
336 { return BSWAP16(t); }
338 inline int16_t UBEV(const int16_t& t)
339 { return BSWAP16(t); }
340 
341 # ifdef HAVE_ARCH_ARM32
342 inline uint32_t UBEV(const uint32_t& t)
344 {
345  const uint16_t* tp = (const uint16_t*)&t;
346  return BSWAP16(tp[1]) | (uint32_t(BSWAP16(tp[0]))<<16);
347 }
349 inline int32_t UBEV(const int32_t& t)
350 {
351  const uint16_t* tp = (const uint16_t*)&t;
352  return BSWAP16(tp[1]) | (uint32_t(BSWAP16(tp[0]))<<16);
353 }
354 
356 inline uint64_t UBEV(const uint64_t& t)
357 {
358  const uint16_t* tp = (const uint16_t*)&t;
359  return BSWAP16(tp[3]) | (uint64_t(BSWAP16(tp[2]))<<16) |
360  (uint64_t(BSWAP16(tp[1]))<<32) | (uint64_t(BSWAP16(tp[0]))<<48);
361 }
362 
364 inline int64_t UBEV(const int64_t& t)
365 {
366  const uint16_t* tp = (const uint16_t*)&t;
367  return BSWAP16(tp[3]) | (uint64_t(BSWAP16(tp[2]))<<16) |
368  (uint64_t(BSWAP16(tp[1]))<<32) | (uint64_t(BSWAP16(tp[0]))<<48);
369 }
370 # else
371 inline uint32_t UBEV(const uint32_t& t)
373 { return BSWAP32(t); }
375 inline int32_t UBEV(const int32_t& t)
376 { return BSWAP32(t); }
377 
379 inline uint64_t UBEV(const uint64_t& t)
380 { return BSWAP64(t); }
382 inline int64_t UBEV(const int64_t& t)
383 { return BSWAP64(t); }
384 # endif // ARM32
385 
386 # endif // IA/SPARC/MIPS
387 
389 inline uint16_t LEV(uint16_t t)
390 { return t; }
392 inline int16_t LEV(int16_t t)
393 { return t; }
394 
396 inline uint32_t LEV(uint32_t t)
397 { return t; }
399 inline int32_t LEV(int32_t t)
400 { return t; }
401 
403 inline uint64_t LEV(uint64_t t)
404 { return t; }
406 inline int64_t LEV(int64_t t)
407 { return t; }
408 
409 # if defined(HAVE_ARCH_SPARCH) || defined(HAVE_ARCH_MIPS) || defined(HAVE_ARCH_IA64)
410 
412 inline uint16_t ULEV(const uint16_t& t)
413 {
414  const uint8_t* tp = (const uint8_t*)&t;
415  return tp[0] | (uint16_t(tp[1])<<8);
416 }
418 inline int16_t ULEV(const int16_t& t)
419 {
420  const uint8_t* tp = (const uint8_t*)&t;
421  return tp[0] | (uint16_t(tp[1])<<8);
422 }
424 inline uint32_t ULEV(const uint32_t& t)
425 {
426  const uint8_t* tp = (const uint8_t*)&t;
427  return tp[0] | (uint32_t(tp[1])<<8) | (uint32_t(tp[2])<<16) | (uint32_t(tp[3])<<24);
428 }
430 inline int32_t ULEV(const int32_t& t)
431 {
432  const uint8_t* tp = (const uint8_t*)&t;
433  return tp[0] | (uint32_t(tp[1])<<8) | (uint32_t(tp[2])<<16) | (uint32_t(tp[3])<<24);
434 }
436 inline uint64_t ULEV(const uint64_t& t)
437 {
438  const uint8_t* tp = (const uint8_t*)&t;
439  return tp[0] | (uint64_t(tp[1])<<8) | (uint64_t(tp[2])<<16) | (uint64_t(tp[3])<<24) |
440  (uint64_t(tp[4])<<32) | (uint64_t(tp[5])<<40) | (uint64_t(tp[6])<<48) |
441  (uint64_t(tp[7])<<56);
442 }
444 inline int64_t ULEV(const int64_t& t)
445 {
446  const uint8_t* tp = (const uint8_t*)&t;
447  return tp[0] | (uint64_t(tp[1])<<8) | (uint64_t(tp[2])<<16) | (uint64_t(tp[3])<<24) |
448  (uint64_t(tp[4])<<32) | (uint64_t(tp[5])<<40) | (uint64_t(tp[6])<<48) |
449  (uint64_t(tp[7])<<56);
450 }
451 
452 # else
453 
455 inline uint16_t ULEV(const uint16_t& t)
456 { return t; }
458 inline int16_t ULEV(const int16_t& t)
459 { return t; }
460 
461 # ifdef HAVE_ARCH_ARM32
462 inline uint32_t ULEV(const uint32_t& t)
464 {
465  const uint16_t* tp = (const uint16_t*)&t;
466  return tp[0] | (uint32_t(tp[1])<<16);
467 }
469 inline int32_t ULEV(const int32_t& t)
470 {
471  const uint16_t* tp = (const uint16_t*)&t;
472  return tp[0] | (uint32_t(tp[1])<<16);
473 }
474 
476 inline uint64_t ULEV(const uint64_t& t)
477 {
478  const uint16_t* tp = (const uint16_t*)&t;
479  return tp[0] | (uint64_t(tp[1])<<16) | (uint64_t(tp[2])<<32) |
480  (uint64_t(tp[3])<<48);
481 }
482 
484 inline int64_t ULEV(const int64_t& t)
485 {
486  const uint16_t* tp = (const uint16_t*)&t;
487  return tp[0] | (uint64_t(tp[1])<<16) | (uint64_t(tp[2])<<32) |
488  (uint64_t(tp[3])<<48);
489 }
490 # else
491 inline uint32_t ULEV(const uint32_t& t)
493 { return t; }
495 inline int32_t ULEV(const int32_t& t)
496 { return t; }
497 
499 inline uint64_t ULEV(const uint64_t& t)
500 { return t; }
502 inline int64_t ULEV(const int64_t& t)
503 { return t; }
504 # endif
505 
506 # endif // IA64/SPARC/MIPS
507 
509 inline void SBEV(uint16_t& r, uint16_t v)
510 { r = BSWAP16(v); }
512 inline void SBEV(int16_t& r, int16_t v)
513 { r = BSWAP16(v); }
514 
516 inline void SBEV(uint32_t& r, uint32_t v)
517 { r = BSWAP32(v); }
519 inline void SBEV(int32_t& r, int32_t v)
520 { r = BSWAP32(v); }
521 
523 inline void SBEV(uint64_t& r, uint64_t v)
524 { r = BSWAP64(v); }
526 inline void SBEV(int64_t& r, int64_t v)
527 { r = BSWAP64(v); }
528 
529 # if defined(HAVE_ARCH_SPARCH) || defined(HAVE_ARCH_MIPS) || defined(HAVE_ARCH_IA64)
530 
532 inline void SUBEV(uint16_t& r, uint16_t v)
533 {
534  uint8_t* rp = (uint8_t*)&r;
535  rp[0] = uint8_t(v>>8);
536  rp[1] = uint8_t(v);
537 }
539 inline void SUBEV(int16_t& r, int16_t v)
540 {
541  uint8_t* rp = (uint8_t*)&r;
542  rp[0] = uint8_t(v>>8);
543  rp[1] = uint8_t(v);
544 }
546 inline void SUBEV(uint32_t& r, uint32_t v)
547 {
548  uint8_t* rp = (uint8_t*)&r;
549  rp[0] = uint8_t(v>>24);
550  rp[1] = uint8_t(v>>16);
551  rp[2] = uint8_t(v>>8);
552  rp[3] = uint8_t(v);
553 }
555 inline void SUBEV(int32_t& r, int32_t v)
556 {
557  uint8_t* rp = (uint8_t*)&r;
558  rp[0] = uint8_t(v>>24);
559  rp[1] = uint8_t(v>>16);
560  rp[2] = uint8_t(v>>8);
561  rp[3] = uint8_t(v);
562 }
564 inline void SUBEV(uint64_t& r, uint64_t v)
565 {
566  uint8_t* rp = (uint8_t*)&r;
567  rp[0] = uint8_t(v>>56);
568  rp[1] = uint8_t(v>>48);
569  rp[2] = uint8_t(v>>40);
570  rp[3] = uint8_t(v>>32);
571  rp[4] = uint8_t(v>>24);
572  rp[5] = uint8_t(v>>16);
573  rp[6] = uint8_t(v>>8);
574  rp[7] = uint8_t(v);
575 }
577 inline void SUBEV(int64_t& r, int64_t v)
578 {
579  uint8_t* rp = (uint8_t*)&r;
580  rp[0] = uint8_t(v>>56);
581  rp[1] = uint8_t(v>>48);
582  rp[2] = uint8_t(v>>40);
583  rp[3] = uint8_t(v>>32);
584  rp[4] = uint8_t(v>>24);
585  rp[5] = uint8_t(v>>16);
586  rp[6] = uint8_t(v>>8);
587  rp[7] = uint8_t(v);
588 }
589 
590 # else
591 
593 inline void SUBEV(uint16_t& r, uint16_t v)
594 { r = BSWAP16(v); }
596 inline void SUBEV(int16_t& r, int16_t v)
597 { r = BSWAP16(v); }
598 
599 # ifdef HAVE_ARCH_ARM32
600 inline void SUBEV(uint32_t& r, uint32_t v)
602 {
603  uint16_t* rp = (uint16_t*)&r;
604  rp[0] = BSWAP16(uint16_t(v>>16));
605  rp[1] = BSWAP16(uint16_t(v));
606 }
608 inline void SUBEV(int32_t& r, int32_t v)
609 {
610  uint16_t* rp = (uint16_t*)&r;
611  rp[0] = BSWAP16(uint16_t(v>>16));
612  rp[1] = BSWAP16(uint16_t(v));
613 }
614 
616 inline void SUBEV(uint64_t& r, uint64_t v)
617 {
618  uint16_t* rp = (uint16_t*)&r;
619  rp[0] = BSWAP16(uint16_t(v>>48));
620  rp[1] = BSWAP16(uint16_t(v>>32));
621  rp[2] = BSWAP16(uint16_t(v>>16));
622  rp[3] = BSWAP16(uint16_t(v));
623 }
625 inline void SUBEV(int64_t& r, int64_t v)
626 {
627  uint16_t* rp = (uint16_t*)&r;
628  rp[0] = BSWAP16(uint16_t(v>>48));
629  rp[1] = BSWAP16(uint16_t(v>>32));
630  rp[2] = BSWAP16(uint16_t(v>>16));
631  rp[3] = BSWAP16(uint16_t(v));
632 }
633 # else
634 inline void SUBEV(uint32_t& r, uint32_t v)
636 { r = BSWAP32(v); }
638 inline void SUBEV(int32_t& r, int32_t v)
639 { r = BSWAP32(v); }
640 
642 inline void SUBEV(uint64_t& r, uint64_t v)
643 { r = BSWAP64(v); }
645 inline void SUBEV(int64_t& r, int64_t v)
646 { r = BSWAP64(v); }
647 # endif
648 
649 # endif // IA64/MIPS/SPARC
650 
652 inline void SLEV(uint16_t& r, uint16_t v)
653 { r = v; }
655 inline void SLEV(int16_t& r, int16_t v)
656 { r = v; }
657 
659 inline void SLEV(uint32_t& r, uint32_t v)
660 { r = v; }
662 inline void SLEV(int32_t& r, int32_t v)
663 { r = v; }
664 
666 inline void SLEV(uint64_t& r, uint64_t v)
667 { r = v; }
669 inline void SLEV(int64_t& r, int64_t v)
670 { r = v; }
671 
672 # if defined(HAVE_ARCH_SPARCH) || defined(HAVE_ARCH_MIPS) || defined(HAVE_ARCH_IA64)
673 
675 inline void SULEV(uint16_t& r, uint16_t v)
676 {
677  uint8_t* rp = (uint8_t*)&r;
678  rp[0] = uint8_t(v);
679  rp[1] = uint8_t(v>>8);
680 }
682 inline void SULEV(int16_t& r, int16_t v)
683 {
684  uint8_t* rp = (uint8_t*)&r;
685  rp[0] = uint8_t(v);
686  rp[1] = uint8_t(v>>8);
687 }
689 inline void SULEV(uint32_t& r, uint32_t v)
690 {
691  uint8_t* rp = (uint8_t*)&r;
692  rp[0] = uint8_t(v);
693  rp[1] = uint8_t(v>>8);
694  rp[2] = uint8_t(v>>16);
695  rp[3] = uint8_t(v>>24);
696 }
698 inline void SULEV(int32_t& r, int32_t v)
699 {
700  uint8_t* rp = (uint8_t*)&r;
701  rp[0] = uint8_t(v);
702  rp[1] = uint8_t(v>>8);
703  rp[2] = uint8_t(v>>16);
704  rp[3] = uint8_t(v>>24);
705 }
707 inline void SULEV(uint64_t& r, uint64_t v)
708 {
709  uint8_t* rp = (uint8_t*)&r;
710  rp[0] = uint8_t(v);
711  rp[1] = uint8_t(v>>8);
712  rp[2] = uint8_t(v>>16);
713  rp[3] = uint8_t(v>>24);
714  rp[4] = uint8_t(v>>32);
715  rp[5] = uint8_t(v>>40);
716  rp[6] = uint8_t(v>>48);
717  rp[7] = uint8_t(v>>56);
718 }
720 inline void SULEV(int64_t& r, int64_t v)
721 {
722  uint8_t* rp = (uint8_t*)&r;
723  rp[0] = uint8_t(v);
724  rp[1] = uint8_t(v>>8);
725  rp[2] = uint8_t(v>>16);
726  rp[3] = uint8_t(v>>24);
727  rp[4] = uint8_t(v>>32);
728  rp[5] = uint8_t(v>>40);
729  rp[6] = uint8_t(v>>48);
730  rp[7] = uint8_t(v>>56);
731 }
732 
733 # else
734 
736 inline void SULEV(uint16_t& r, uint16_t v)
737 { r = v; }
739 inline void SULEV(int16_t& r, int16_t v)
740 { r = v; }
741 
742 # ifdef HAVE_ARCH_ARM32
743 inline void SULEV(uint32_t& r, uint32_t v)
745 {
746  uint16_t* rp = (uint16_t*)&r;
747  rp[0] = uint16_t(v);
748  rp[1] = uint16_t(v>>16);
749 }
751 inline void SULEV(int32_t& r, int32_t v)
752 {
753  uint16_t* rp = (uint16_t*)&r;
754  rp[0] = uint16_t(v);
755  rp[1] = uint16_t(v>>16);
756 }
757 
759 inline void SULEV(uint64_t& r, uint64_t v)
760 {
761  uint16_t* rp = (uint16_t*)&r;
762  rp[0] = uint16_t(v);
763  rp[1] = uint16_t(v>>16);
764  rp[2] = uint16_t(v>>32);
765  rp[3] = uint16_t(v>>48);
766 }
768 inline void SULEV(int64_t& r, int64_t v)
769 {
770  uint16_t* rp = (uint16_t*)&r;
771  rp[0] = uint16_t(v);
772  rp[1] = uint16_t(v>>16);
773  rp[2] = uint16_t(v>>32);
774  rp[3] = uint16_t(v>>48);
775 }
776 # else
777 inline void SULEV(uint32_t& r, uint32_t v)
779 { r = v; }
781 inline void SULEV(int32_t& r, int32_t v)
782 { r = v; }
783 
785 inline void SULEV(uint64_t& r, uint64_t v)
786 { r = v; }
788 inline void SULEV(int64_t& r, int64_t v)
789 { r = v; }
790 # endif
791 
792 # endif // IA64/MIPS/SPARC
793 
794 #else // BIG ENDIAN
795 
797 inline uint16_t BEV(uint16_t t)
798 { return t; }
800 inline int16_t BEV(int16_t t)
801 { return t; }
802 
804 inline uint32_t BEV(uint32_t t)
805 { return t; }
807 inline int32_t BEV(int32_t t)
808 { return t; }
809 
811 inline uint64_t BEV(uint64_t t)
812 { return t; }
814 inline int64_t BEV(int64_t t)
815 { return t; }
816 
817 # if defined(HAVE_ARCH_SPARCH) || defined(HAVE_ARCH_MIPS) || defined(HAVE_ARCH_IA64)
818 
820 inline uint16_t UBEV(const uint16_t& t)
821 {
822  const uint8_t* tp = (const uint8_t*)&t;
823  return tp[1] | (uint16_t(tp[0])<<8);
824 }
826 inline int16_t UBEV(const int16_t& t)
827 {
828  const uint8_t* tp = (const uint8_t*)&t;
829  return tp[1] | (uint16_t(tp[0])<<8);
830 }
832 inline uint32_t UBEV(const uint32_t& t)
833 {
834  const uint8_t* tp = (const uint8_t*)&t;
835  return tp[3] | (uint32_t(tp[2])<<8) | (uint32_t(tp[1])<<16) | (uint32_t(tp[0])<<24);
836 }
838 inline int32_t UBEV(const int32_t& t)
839 {
840  const uint8_t* tp = (const uint8_t*)&t;
841  return tp[3] | (uint32_t(tp[2])<<8) | (uint32_t(tp[1])<<16) | (uint32_t(tp[0])<<24);
842 }
844 inline uint64_t UBEV(const uint64_t& t)
845 {
846  const uint8_t* tp = (const uint8_t*)&t;
847  return tp[7] | (uint64_t(tp[6])<<8) | (uint64_t(tp[5])<<16) | (uint64_t(tp[4])<<24) |
848  (uint64_t(tp[3])<<32) | (uint64_t(tp[2])<<40) | (uint64_t(tp[1])<<48) |
849  (uint64_t(tp[0])<<56);
850 }
852 inline int64_t UBEV(const int64_t& t)
853 {
854  const uint8_t* tp = (const uint8_t*)&t;
855  return tp[7] | (uint64_t(tp[6])<<8) | (uint64_t(tp[5])<<16) | (uint64_t(tp[4])<<24) |
856  (uint64_t(tp[3])<<32) | (uint64_t(tp[2])<<40) | (uint64_t(tp[1])<<48) |
857  (uint64_t(tp[0])<<56);
858 }
859 
860 # else
861 
863 inline uint16_t UBEV(const uint16_t& t)
864 { return t; }
866 inline int16_t UBEV(const int16_t& t)
867 { return t; }
868 
869 # ifdef HAVE_ARCH_ARM32
870 inline uint32_t UBEV(const uint32_t& t)
872 {
873  const uint16_t* tp = (const uint16_t*)&t;
874  return tp[1] | (uint32_t(tp[0])<<16);
875 }
877 inline int32_t UBEV(const int32_t& t)
878 {
879  const uint16_t* tp = (const uint16_t*)&t;
880  return tp[1] | (uint32_t(tp[0])<<16);
881 }
882 
884 inline uint64_t UBEV(const uint64_t& t)
885 {
886  const uint16_t* tp = (const uint16_t*)&t;
887  return tp[3] | (uint64_t(tp[2])<<16) | (uint64_t(tp[1])<<32) |
888  (uint64_t(tp[0])<<48);
889 }
890 
892 inline int64_t UBEV(const int64_t& t)
893 {
894  const uint16_t* tp = (const uint16_t*)&t;
895  return tp[3] | (uint64_t(tp[2])<<16) | (uint64_t(tp[1])<<32) |
896  (uint64_t(tp[0])<<48);
897 }
898 # else
899 inline uint32_t UBEV(const uint32_t& t)
901 { return t; }
903 inline int32_t UBEV(const int32_t& t)
904 { return t; }
905 
907 inline uint64_t UBEV(const uint64_t& t)
908 { return t; }
910 inline int64_t UBEV(const int64_t& t)
911 { return t; }
912 # endif
913 
914 # endif // IA64/MIPS/SPARC
915 
917 inline uint16_t LEV(uint16_t t)
918 { return BSWAP16(t); }
920 inline int16_t LEV(int16_t t)
921 { return BSWAP16(t); }
922 
924 inline uint32_t LEV(uint32_t t)
925 { return BSWAP32(t); }
927 inline int32_t LEV(int32_t t)
928 { return BSWAP32(t); }
929 
931 inline uint64_t LEV(uint64_t t)
932 { return BSWAP64(t); }
934 inline int64_t LEV(int64_t t)
935 { return BSWAP64(t); }
936 
937 # if defined(HAVE_ARCH_SPARCH) || defined(HAVE_ARCH_MIPS) || defined(HAVE_ARCH_IA64)
938 
940 inline uint16_t ULEV(const uint16_t& t)
941 {
942  const uint8_t* tp = (const uint8_t*)&t;
943  return tp[0] | (uint16_t(tp[1])<<8);
944 }
946 inline int16_t ULEV(const int16_t& t)
947 {
948  const uint8_t* tp = (const uint8_t*)&t;
949  return tp[0] | (uint16_t(tp[1])<<8);
950 }
951 inline uint32_t ULEV(const uint32_t& t)
952 {
953  const uint8_t* tp = (const uint8_t*)&t;
954  return tp[0] | (uint32_t(tp[1])<<8) | (uint32_t(tp[2])<<16) | (uint32_t(tp[3])<<24);
955 }
957 inline int32_t ULEV(const int32_t& t)
958 {
959  const uint8_t* tp = (const uint8_t*)&t;
960  return tp[0] | (uint32_t(tp[1])<<8) | (uint32_t(tp[2])<<16) | (uint32_t(tp[3])<<24);
961 }
963 inline uint64_t ULEV(const uint64_t& t)
964 {
965  const uint8_t* tp = (const uint8_t*)&t;
966  return tp[0] | (uint64_t(tp[1])<<8) | (uint64_t(tp[2])<<16) | (uint64_t(tp[3])<<24) |
967  (uint64_t(tp[4])<<32) | (uint64_t(tp[5])<<40) | (uint64_t(tp[6])<<48) |
968  (uint64_t(tp[7])<<56);
969 }
971 inline int64_t ULEV(const int64_t& t)
972 {
973  const uint8_t* tp = (const uint8_t*)&t;
974  return tp[0] | (uint64_t(tp[1])<<8) | (uint64_t(tp[2])<<16) | (uint64_t(tp[3])<<24) |
975  (uint64_t(tp[4])<<32) | (uint64_t(tp[5])<<40) | (uint64_t(tp[6])<<48) |
976  (uint64_t(tp[7])<<56);
977 }
978 
979 # else
980 
982 inline uint16_t ULEV(const uint16_t& t)
983 { return BSWAP16(t); }
985 inline int16_t ULEV(const int16_t& t)
986 { return BSWAP16(t); }
987 
988 # ifdef HAVE_ARCH_ARM32
989 inline uint32_t ULEV(const uint32_t& t)
991 {
992  const uint16_t* tp = (const uint16_t*)&t;
993  return BSWAP16(tp[0]) | (uint32_t(BSWAP16(tp[1]))<<16);
994 }
996 inline int32_t ULEV(const int32_t& t)
997 {
998  const uint16_t* tp = (const uint16_t*)&t;
999  return BSWAP16(tp[0]) | (uint32_t(BSWAP16(tp[1]))<<16);
1000 }
1001 
1003 inline uint64_t ULEV(const uint64_t& t)
1004 {
1005  const uint16_t* tp = (const uint16_t*)&t;
1006  return BSWAP16(tp[0]) | (uint64_t(BSWAP16(tp[1]))<<16) |
1007  (uint64_t(BSWAP16(tp[2]))<<32) | (uint64_t(BSWAP16(tp[3]))<<48);
1008 }
1009 
1011 inline int64_t ULEV(const int64_t& t)
1012 {
1013  const uint16_t* tp = (const uint16_t*)&t;
1014  return BSWAP16(tp[0]) | (uint64_t(BSWAP16(tp[1]))<<16) |
1015  (uint64_t(BSWAP16(tp[2]))<<32) | (uint64_t(BSWAP16(tp[3]))<<48);
1016 }
1017 # else
1018 inline uint32_t ULEV(const uint32_t& t)
1020 { return BSWAP32(t); }
1022 inline int32_t ULEV(const int32_t& t)
1023 { return BSWAP32(t); }
1024 
1026 inline uint64_t ULEV(const uint64_t& t)
1027 { return BSWAP64(t); }
1029 inline int64_t ULEV(const int64_t& t)
1030 { return BSWAP64(t); }
1031 # endif
1032 
1033 # endif // IA64/MIPS/SPARC
1034 
1036 inline void SBEV(uint16_t& r, uint16_t v)
1037 { r = v; }
1039 inline void SBEV(int16_t& r, int16_t v)
1040 { r = v; }
1041 
1043 inline void SBEV(uint32_t& r, uint32_t v)
1044 { r = v; }
1046 inline void SBEV(int32_t& r, int32_t v)
1047 { r = v; }
1048 
1050 inline void SBEV(uint64_t& r, uint64_t v)
1051 { r = v; }
1053 inline void SBEV(int64_t& r, int64_t v)
1054 { r = v; }
1055 
1056 # if defined(HAVE_ARCH_SPARCH) || defined(HAVE_ARCH_MIPS) || defined(HAVE_ARCH_IA64)
1057 
1059 inline void SUBEV(uint16_t& r, uint16_t v)
1060 {
1061  uint8_t* rp = (uint8_t*)&r;
1062  rp[1] = uint8_t(v);
1063  rp[0] = uint8_t(v>>8);
1064 }
1066 inline void SUBEV(int16_t& r, int16_t v)
1067 {
1068  uint8_t* rp = (uint8_t*)&r;
1069  rp[1] = uint8_t(v);
1070  rp[0] = uint8_t(v>>8);
1071 }
1073 inline void SUBEV(uint32_t& r, uint32_t v)
1074 {
1075  uint8_t* rp = (uint8_t*)&r;
1076  rp[3] = uint8_t(v);
1077  rp[2] = uint8_t(v>>8);
1078  rp[1] = uint8_t(v>>16);
1079  rp[0] = uint8_t(v>>24);
1080 }
1082 inline void SUBEV(int32_t& r, int32_t v)
1083 {
1084  uint8_t* rp = (uint8_t*)&r;
1085  rp[3] = uint8_t(v);
1086  rp[2] = uint8_t(v>>8);
1087  rp[1] = uint8_t(v>>16);
1088  rp[0] = uint8_t(v>>24);
1089 }
1091 inline void SUBEV(uint64_t& r, uint64_t v)
1092 {
1093  uint8_t* rp = (uint8_t*)&r;
1094  rp[7] = uint8_t(v);
1095  rp[6] = uint8_t(v>>8);
1096  rp[5] = uint8_t(v>>16);
1097  rp[4] = uint8_t(v>>24);
1098  rp[3] = uint8_t(v>>32);
1099  rp[2] = uint8_t(v>>40);
1100  rp[1] = uint8_t(v>>48);
1101  rp[0] = uint8_t(v>>56);
1102 }
1104 inline void SUBEV(int64_t& r, int64_t v)
1105 {
1106  uint8_t* rp = (uint8_t*)&r;
1107  rp[7] = uint8_t(v);
1108  rp[6] = uint8_t(v>>8);
1109  rp[5] = uint8_t(v>>16);
1110  rp[4] = uint8_t(v>>24);
1111  rp[3] = uint8_t(v>>32);
1112  rp[2] = uint8_t(v>>40);
1113  rp[1] = uint8_t(v>>48);
1114  rp[0] = uint8_t(v>>56);
1115 }
1116 
1117 # else
1118 
1120 inline void SUBEV(uint16_t& r, uint16_t v)
1121 { r = v; }
1123 inline void SUBEV(int16_t& r, int16_t v)
1124 { r = v; }
1125 
1126 # ifdef HAVE_ARCH_ARM32
1127 inline void SUBEV(uint32_t& r, uint32_t v)
1129 {
1130  uint16_t* rp = (uint16_t*)&r;
1131  rp[1] = uint16_t(v);
1132  rp[0] = uint16_t(v>>16);
1133 }
1135 inline void SUBEV(int32_t& r, int32_t v)
1136 {
1137  uint16_t* rp = (uint16_t*)&r;
1138  rp[1] = uint16_t(v);
1139  rp[0] = uint16_t(v>>16);
1140 }
1141 
1143 inline void SUBEV(uint64_t& r, uint64_t v)
1144 {
1145  uint16_t* rp = (uint16_t*)&r;
1146  rp[3] = uint16_t(v);
1147  rp[2] = uint16_t(v>>16);
1148  rp[1] = uint16_t(v>>32);
1149  rp[0] = uint16_t(v>>48);
1150 }
1152 inline void SUBEV(int64_t& r, int64_t v)
1153 {
1154  uint16_t* rp = (uint16_t*)&r;
1155  rp[3] = uint16_t(v);
1156  rp[2] = uint16_t(v>>16);
1157  rp[1] = uint16_t(v>>32);
1158  rp[0] = uint16_t(v>>48);
1159 }
1160 # else
1161 inline void SUBEV(uint32_t& r, uint32_t v)
1163 { r = v; }
1165 inline void SUBEV(int32_t& r, int32_t v)
1166 { r = v; }
1167 
1169 inline void SUBEV(uint64_t& r, uint64_t v)
1170 { r = v; }
1172 inline void SUBEV(int64_t& r, int64_t v)
1173 { r = v; }
1174 # endif
1175 
1176 # endif // IA64/MIPS/SPARC
1177 
1179 inline void SLEV(uint16_t& r, uint16_t v)
1180 { r = BSWAP16(v); }
1182 inline void SLEV(int16_t& r, int16_t v)
1183 { r = BSWAP16(v); }
1184 
1186 inline void SLEV(uint32_t& r, uint32_t v)
1187 { r = BSWAP32(v); }
1189 inline void SLEV(int32_t& r, int32_t v)
1190 { r = BSWAP32(v); }
1191 
1193 inline void SLEV(uint64_t& r, uint64_t v)
1194 { r = BSWAP64(v); }
1196 inline void SLEV(int64_t& r, int64_t v)
1197 { r = BSWAP64(v); }
1198 
1199 # if defined(HAVE_ARCH_SPARCH) || defined(HAVE_ARCH_MIPS) || defined(HAVE_ARCH_IA64)
1200 
1202 inline void SULEV(uint16_t& r, uint16_t v)
1203 {
1204  uint8_t* rp = (uint8_t*)&r;
1205  rp[1] = uint8_t(v>>8);
1206  rp[0] = uint8_t(v);
1207 }
1209 inline void SULEV(int16_t& r, int16_t v)
1210 {
1211  uint8_t* rp = (uint8_t*)&r;
1212  rp[1] = uint8_t(v>>8);
1213  rp[0] = uint8_t(v);
1214 }
1216 inline void SULEV(uint32_t& r, uint32_t v)
1217 {
1218  uint8_t* rp = (uint8_t*)&r;
1219  rp[3] = uint8_t(v>>24);
1220  rp[2] = uint8_t(v>>16);
1221  rp[1] = uint8_t(v>>8);
1222  rp[0] = uint8_t(v);
1223 }
1225 inline void SULEV(int32_t& r, int32_t v)
1226 {
1227  uint8_t* rp = (uint8_t*)&r;
1228  rp[3] = uint8_t(v>>24);
1229  rp[2] = uint8_t(v>>16);
1230  rp[1] = uint8_t(v>>8);
1231  rp[0] = uint8_t(v);
1232 }
1234 inline void SULEV(uint64_t& r, uint64_t v)
1235 {
1236  uint8_t* rp = (uint8_t*)&r;
1237  rp[7] = uint8_t(v>>56);
1238  rp[6] = uint8_t(v>>48);
1239  rp[5] = uint8_t(v>>40);
1240  rp[4] = uint8_t(v>>32);
1241  rp[3] = uint8_t(v>>24);
1242  rp[2] = uint8_t(v>>16);
1243  rp[1] = uint8_t(v>>8);
1244  rp[0] = uint8_t(v);
1245 }
1247 inline void SULEV(int64_t& r, int64_t v)
1248 {
1249  uint8_t* rp = (uint8_t*)&r;
1250  rp[7] = uint8_t(v>>56);
1251  rp[6] = uint8_t(v>>48);
1252  rp[5] = uint8_t(v>>40);
1253  rp[4] = uint8_t(v>>32);
1254  rp[3] = uint8_t(v>>24);
1255  rp[2] = uint8_t(v>>16);
1256  rp[1] = uint8_t(v>>8);
1257  rp[0] = uint8_t(v);
1258 }
1259 
1260 # else
1261 
1263 inline void SULEV(uint16_t& r, uint16_t v)
1264 { r = BSWAP16(v); }
1266 inline void SULEV(int16_t& r, int16_t v)
1267 { r = BSWAP16(v); }
1268 
1269 # ifdef HAVE_ARCH_ARM32
1270 inline void SULEV(uint32_t& r, uint32_t v)
1272 {
1273  uint16_t* rp = (uint16_t*)&r;
1274  rp[1] = BSWAP16(uint16_t(v>>16));
1275  rp[0] = BSWAP16(uint16_t(v));
1276 }
1278 inline void SULEV(int32_t& r, int32_t v)
1279 {
1280  uint16_t* rp = (uint16_t*)&r;
1281  rp[1] = BSWAP16(uint16_t(v>>16));
1282  rp[0] = BSWAP16(uint16_t(v));
1283 }
1284 
1286 inline void SULEV(uint64_t& r, uint64_t v)
1287 {
1288  uint16_t* rp = (uint16_t*)&r;
1289  rp[3] = BSWAP16(uint16_t(v>>48));
1290  rp[2] = BSWAP16(uint16_t(v>>32));
1291  rp[1] = BSWAP16(uint16_t(v>>16));
1292  rp[0] = BSWAP16(uint16_t(v));
1293 }
1295 inline void SULEV(int64_t& r, int64_t v)
1296 {
1297  uint16_t* rp = (uint16_t*)&r;
1298  rp[3] = BSWAP16(uint16_t(v>>48));
1299  rp[2] = BSWAP16(uint16_t(v>>32));
1300  rp[1] = BSWAP16(uint16_t(v>>16));
1301  rp[0] = BSWAP16(uint16_t(v));
1302 }
1303 # else
1304 inline void SULEV(uint32_t& r, uint32_t v)
1306 { r = BSWAP32(v); }
1308 inline void SULEV(int32_t& r, int32_t v)
1309 { r = BSWAP32(v); }
1310 
1312 inline void SULEV(uint64_t& r, uint64_t v)
1313 { r = BSWAP64(v); }
1315 inline void SULEV(int64_t& r, int64_t v)
1316 { r = BSWAP64(v); }
1317 # endif
1318 
1319 # endif // IA64/MIPS/SPARC
1320 
1321 #endif
1322 
1323 };
1324 
1325 #endif
uint8_t UBEV(const uint8_t &t)
convert from/to big endian value from unaligned memory
Configuration header.
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:1059
uint32_t BSWAP32(uint32_t v)
BSWAP 32-bit.
Definition: MemAccess.h:201
main namespace
Definition: AsmDefs.h:38
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