3#if !defined(__RADRR_CORE2H__)
4#define __RADRR_CORE2H__
15 #define RADTODO(str) { char __str[0]=str; }
20#if defined __RADMAC__ || defined __RADIPHONE__
24#if defined __RADBSD__ || defined __RADLINUX__ || defined __RADQNX__
29 #define RAD_PTRBITS 64
30 #define RAD_PTRBYTES 8
31 #define RAD_TWOPTRBYTES 16
33 #define RAD_PTRBITS 32
34 #define RAD_PTRBYTES 4
35 #define RAD_TWOPTRBYTES 8
38#if defined(__RADMAC__)
40 #define RAD_TLS(type,var) __thread type var
42 #define RR_BREAK() __builtin_trap()
44 #define RR_CACHE_LINE_SIZE 32
46 #define RR_CACHE_LINE_SIZE 64
48 #define RAD_GUARANTEED_SSE3
50 #define RAD_USES_SSSE3
52#if defined(__RADIPHONE__)
53 #define RR_BREAK() __builtin_trap()
54 #define RR_CACHE_LINE_SIZE 32
55 #define RAD_GUARANTEED_SSE3
58#if defined(__RADANDROID__)
59 #define RR_BREAK() __builtin_trap()
61 #define RR_CACHE_LINE_SIZE 32
62 #elif defined(__RADX86__)
63 #ifndef RR_CACHE_LINE_SIZE
64 #define RR_CACHE_LINE_SIZE 64
69#if defined(__RADLINUX__)
71 #define RAD_TLS(type,var) __thread type var
73 #define RR_BREAK() __builtin_trap()
75 #define RR_CACHE_LINE_SIZE 32
77 #define RR_CACHE_LINE_SIZE 64
80#if defined(__RADQNX__)
81 #define RR_BREAK() __builtin_trap()
83 #define RR_CACHE_LINE_SIZE 32
85 #define RR_CACHE_LINE_SIZE 64
88#if defined(__RADWINRT__)
93 #define RR_CACHE_LINE_SIZE 32
95 #define RR_CACHE_LINE_SIZE 64
97 #define RR_BREAK __debugbreak
100 #define RADASMLINK __cdecl
102 #define RAD_TLS(type,var) __declspec(thread) type var
105 #define __RAD64REGS__
108 #define RR_CACHE_LINE_SIZE 32
110 #define RR_CACHE_LINE_SIZE 64
112 #if defined(_MSC_VER) && _MSC_VER >= 1300
113 #define RR_BREAK __debugbreak
115 #define RR_BREAK() RAD_STATEMENT_WRAPPER( __asm {int 3} )
119#if defined(__RADEMSCRIPTEN__)
120 #define RR_BREAK() __builtin_trap()
121 #define RR_CACHE_LINE_SIZE 64
124#if !defined(RR_BREAK)
125 #error "No rr_break defined!"
130 #define RAD_UINTr RAD_U64
131 #define RAD_SINTr RAD_S64
133 #define RAD_UINTr RAD_U32
134 #define RAD_SINTr RAD_S32
138#ifdef __RADNTBUILDLINUX__
141 #undef RADDLLEXPORTDLL
142 #undef RADDLLIMPORTDLL
146 #define RADDLLEXPORTDLL
147 #define RADDLLIMPORTDLL
156#define RRSTRIPPABLE __declspec(selectany)
157#define RRSTRIPPABLEPUB __declspec(selectany)
159#define RRSTRIPPABLE static
160#define RRSTRIPPABLEPUB
169 #if (_MSC_VER >= 1300)
170 #define RAD_ALIGN(type,var,num) type __declspec(align(num)) var
171 #define RADNOINLINE __declspec(noinline)
176 #ifndef RAD_USES_SSE3
177 #define RAD_USES_SSE3
179 #ifndef RAD_USES_SSSE3
180 #define RAD_USES_SSSE3
183 #define RADFORCEINLINE __forceinline
184 #define RADUNREACHABLE __assume(0)
185 #define RADASSUME(exp) __assume(exp)
187 #define RAD_TLS(type,var) __declspec(thread) type var
189 #define RAD_EXPECT(expr,cond) (expr)
191#elif defined(__clang__)
193 #define RAD_ALIGN(type,var,num) type __attribute__ ((aligned (num))) var
195 #define RADFORCEINLINE inline
197 #define RADFORCEINLINE inline __attribute((always_inline))
200 #ifndef RAD_USES_SSE3
201 #define RAD_USES_SSE3 __attribute__((target("sse3")))
203 #if !defined(RAD_USES_SSSE3) && !defined(__RADIPHONE__)
204 #define RAD_USES_SSSE3 __attribute__((target("ssse3")))
207 #define RADNOINLINE __attribute__((noinline))
208 #define RADUNREACHABLE __builtin_unreachable()
209 #if __has_builtin(__builtin_assume)
210 #define RADASSUME(exp) __builtin_assume(exp)
212 #define RADASSUME(exp) RAD_STATEMENT_WRAPPER( if ( ! (exp) ) __builtin_unreachable(); )
214 #define RAD_EXPECT(expr,cond) __builtin_expect(expr,cond)
216#elif (defined(__GCC__) || defined(__GNUC__)) || defined(ANDROID)
218 #define RAD_ALIGN(type,var,num) type __attribute__ ((aligned (num))) var
220 #define RADFORCEINLINE inline
222 #define RADFORCEINLINE inline __attribute((always_inline))
224 #define RADNOINLINE __attribute__((noinline))
226 #define __RAD_GCC_VERSION__ (__GNUC__ * 10000 \
227 + __GNUC_MINOR__ * 100 \
228 + __GNUC_PATCHLEVEL__)
230 #if __RAD_GCC_VERSION__ >= 40500
231 #define RADUNREACHABLE __builtin_unreachable()
232 #define RADASSUME(exp) RAD_STATEMENT_WRAPPER( if ( ! (exp) ) __builtin_unreachable(); )
234 #define RADUNREACHABLE RAD_INFINITE_LOOP( RR_BREAK(); )
235 #define RADASSUME(exp)
238 #if __RAD_GCC_VERSION__ >= 40600
239 #ifndef RAD_USES_SSE3
240 #define RAD_USES_SSE3 __attribute__((target("sse3")))
242 #ifndef RAD_USES_SSSE3
243 #define RAD_USES_SSSE3 __attribute__((target("ssse3")))
247 #ifdef RAD_USES_SSSE3
248 #undef RAD_USES_SSSE3
252 #define RAD_EXPECT(expr,cond) __builtin_expect(expr,cond)
260#elif defined(__SNC__)
262 #define RAD_ALIGN(type,var,num) type __attribute__ ((aligned (num))) var
263 #define RADFORCEINLINE inline __attribute((always_inline))
264 #define RADNOINLINE __attribute__((noinline))
265 #define RADASSUME(exp) RAD_STATEMENT_WRAPPER( if ( ! (exp) ) RADUNREACHABLE; )
266 #define RAD_EXPECT(expr,cond) __builtin_expect(expr,cond)
268 #define RADUNREACHABLE
270 #define RAD_EXPECT(exp,cond) !! no RAD_EXPECT defined !!
271 #define RADASSUME(exp) !! no RADASSUME defined !!
272 #define RADUNREACHABLE !! no RADUNREACHABLE defined !!
273 #define RADFORCEINLINE !! no RADFORCEINLINE defined !!
274 #define RADNOINLINE !! no RADNOINLINE defined !!
281#define RAD_LIKELY(expr) RAD_EXPECT(expr,1)
282#define RAD_UNLIKELY(expr) RAD_EXPECT(expr,0)
287#if defined(__RADX86__) && !defined(__RADX64__) && defined(_MSC_VER)
288 #define __RADX86ASM__
301 #define RAD_STATEMENT_START \
304 #define RAD_STATEMENT_END_FALSE \
305 __pragma(warning(push)) \
306 __pragma(warning(disable:4127)) \
308 __pragma(warning(pop))
310 #define RAD_STATEMENT_END_TRUE \
311 __pragma(warning(push)) \
312 __pragma(warning(disable:4127)) \
314 __pragma(warning(pop))
317 #define RAD_USE_STANDARD_LOOP_CONSTRUCT
320 #define RAD_USE_STANDARD_LOOP_CONSTRUCT
323#ifdef RAD_USE_STANDARD_LOOP_CONSTRUCT
324 #define RAD_STATEMENT_START \
327 #define RAD_STATEMENT_END_FALSE \
328 } while ( (void)0,0 )
330 #define RAD_STATEMENT_END_TRUE \
331 } while ( (void)1,1 )
334#define RAD_STATEMENT_WRAPPER( code ) \
335 RAD_STATEMENT_START \
337 RAD_STATEMENT_END_FALSE
339#define RAD_INFINITE_LOOP( code ) \
340 RAD_STATEMENT_START \
342 RAD_STATEMENT_END_TRUE
348#if defined(_MSC_VER) && _MSC_VER >= 1600
349 #define RR_UNUSED_VARIABLE(x) (void) (x)
351 #define RR_UNUSED_VARIABLE(x) (void)(sizeof(x))
356#define RR_STRINGIZE( L ) #L
357#define RR_DO_MACRO( M, X ) M(X)
358#define RR_STRINGIZE_DELAY( X ) RR_DO_MACRO( RR_STRINGIZE, X )
359#define RR_LINESTRING RR_STRINGIZE_DELAY( __LINE__ )
361#define RR_CAT(X,Y) X ## Y
363#define RR_STRING_JOIN3(arg1, arg2, arg3) RR_STRING_JOIN_DELAY3(arg1, arg2, arg3)
364#define RR_STRING_JOIN_DELAY3(arg1, arg2, arg3) RR_STRING_JOIN_IMMEDIATE3(arg1, arg2, arg3)
365#define RR_STRING_JOIN_IMMEDIATE3(arg1, arg2, arg3) arg1 ## arg2 ## arg3
371 #define RR_MIN(a,b) ( (a) < (b) ? (a) : (b) )
375 #define RR_MAX(a,b) ( (a) > (b) ? (a) : (b) )
379 #define RR_ABS(a) ( ((a) < 0) ? -(a) : (a) )
383 #define RR_CLAMP(val,lo,hi) RR_MAX( RR_MIN(val,hi), lo )
389#define RR_ARRAY_SIZE(array) ( sizeof(array)/sizeof(array[0]) )
392#define RR_MEMBER_OFFSET(type,member) offsetof(type, member)
395#define RR_MEMBER_SIZE(type,member) ( sizeof( ((type *) 0)->member) )
398#define RR_MEMBER_OFFSET_PTR(type,member,ptr) ( (SINTa) &(((type *)(ptr))->member) - (SINTa)(ptr) )
399#define RR_MEMBER_SIZE_PTR(type,member,ptr) ( sizeof( ((type *) (ptr))->member) )
403#define RR_MEMBER_TO_OWNER(type,member,ptr) (type *)( ((char *)(ptr)) - RR_MEMBER_OFFSET_PTR(type,member,ptr) )
417 #define RR_PREFETCH_SEQUENTIAL(ptr,offset)
418 #define RR_PREFETCH_WRITE_INVALIDATE(ptr,offset)
419#elif defined(__RADANDROID__)
420 #define RR_PREFETCH_SEQUENTIAL(ptr,offset)
421 #define RR_PREFETCH_WRITE_INVALIDATE(ptr,offset)
422#elif defined(__RADWINRT__)
423 #define RR_PREFETCH_SEQUENTIAL(ptr,offset) __prefetch((char *)(ptr) + (int)(offset))
424 #define RR_PREFETCH_WRITE_INVALIDATE(ptr,offset)
425#elif defined(__RADARM__)
426 #define RR_PREFETCH_SEQUENTIAL(ptr,offset)
427 #define RR_PREFETCH_WRITE_INVALIDATE(ptr,offset)
430 #ifndef RR_PREFETCH_SEQUENTIAL
431 #define RR_PREFETCH_SEQUENTIAL(ptr,offset) !! NO PREFETCH DEFINED !!
433 #ifndef RR_PREFETCH_WRITE_INVALIDATE
434 #define RR_PREFETCH_WRITE_INVALIDATE(ptr,offset) !! NO PREFETCH DEFINED !!
442#if (defined(_DEBUG) && !defined(NDEBUG)) || defined(ASSERT_IN_RELEASE)
443 #define RR_DO_ASSERTS
475 #define RR_ASSERT_BREAK() (void)0
477 #define RR_ASSERT_BREAK() RR_BREAK()
481#ifndef RR_ASSERT_ALWAYS
482 #define RR_ASSERT_ALWAYS(exp) RAD_STATEMENT_WRAPPER( if ( ! (exp) ) { RR_ASSERT_BREAK(); } )
485#ifndef RR_ASSERT_FAILURE_ALWAYS
486 #define RR_ASSERT_FAILURE_ALWAYS(str) RAD_STATEMENT_WRAPPER( RR_ASSERT_BREAK(); )
488#ifndef RR_ASSERT_LITE_ALWAYS
489 #define RR_ASSERT_LITE_ALWAYS(exp) RAD_STATEMENT_WRAPPER( if ( ! (exp) ) { RR_ASSERT_BREAK(); } )
494 #define RR_ASSERT(exp) RR_ASSERT_ALWAYS(exp)
495 #define RR_ASSERT_LITE(exp) RR_ASSERT_LITE_ALWAYS(exp)
496 #define RR_ASSERT_NO_ASSUME(exp) RR_ASSERT_ALWAYS(exp)
498 #define RR_DURING_ASSERT(exp) exp
499 #define RR_ASSERT_FAILURE(str) RR_ASSERT_FAILURE_ALWAYS(str)
501 #define RR_CANT_GET_HERE() RAD_STATEMENT_WRAPPER( RR_ASSERT_FAILURE("can't get here"); RADUNREACHABLE; )
503 #define RR_ASSERT(exp) (void)0
504 #define RR_ASSERT_LITE(exp) (void)0
505 #define RR_ASSERT_NO_ASSUME(exp) (void)0
506 #define RR_DURING_ASSERT(exp) (void)0
507 #define RR_ASSERT_FAILURE(str) (void)0
508 #define RR_CANT_GET_HERE() RADUNREACHABLE
515 #define RR_ASSERT_RELEASE(exp) RR_ASSERT_ALWAYS(exp)
516 #define RR_ASSERT_LITE_RELEASE(exp) RR_ASSERT_LITE_ALWAYS(exp)
518 #define RR_ASSERT_RELEASE(exp) (void)0
519 #define RR_ASSERT_LITE_RELEASE(exp) (void)0
523#define RR_ASSERT_ALIGNED(ptr) RR_ASSERT( (((UINTa)(ptr)) & (sizeof(*(ptr))-1)) == 0 )
527#define RR_ASSERT_ALWAYS_NO_SHIP RR_ASSERT_RELEASE
529#define rrAssert RR_ASSERT
530#define rrassert RR_ASSERT
535 #pragma warning( disable : 4127)
554#ifdef RR_GET_RESTRICT
555 #define RR_GET_PTR_POST RADRESTRICT
557#ifndef RR_GET_PTR_POST
558 #define RR_GET_PTR_POST
563#define RR_GET16_NATIVE(ptr) *((const U16 * RR_GET_PTR_POST)(ptr))
564#define RR_PUT16_NATIVE(ptr,val) *((U16 * RR_GET_PTR_POST)(ptr)) = (U16)(val)
567#define RR_U16_PTR_OFFSET(ptr,offset) ((U16 * RR_GET_PTR_POST)((char *)(ptr) + (offset)))
568#define RR_GET16_NATIVE_OFFSET(ptr,offset) *( RR_U16_PTR_OFFSET((ptr),offset) )
569#define RR_PUT16_NATIVE_OFFSET(ptr,val,offset) *( RR_U16_PTR_OFFSET((ptr),offset)) = (val)
571#define RR_GET32_NATIVE(ptr) *((const U32 * RR_GET_PTR_POST)(ptr))
572#define RR_PUT32_NATIVE(ptr,val) *((U32 * RR_GET_PTR_POST)(ptr)) = (val)
575#define RR_U32_PTR_OFFSET(ptr,offset) ((U32 * RR_GET_PTR_POST)((char *)(ptr) + (offset)))
576#define RR_GET32_NATIVE_OFFSET(ptr,offset) *( RR_U32_PTR_OFFSET((ptr),offset) )
577#define RR_PUT32_NATIVE_OFFSET(ptr,val,offset) *( RR_U32_PTR_OFFSET((ptr),offset)) = (val)
579#define RR_GET64_NATIVE(ptr) *((const U64 * RR_GET_PTR_POST)(ptr))
580#define RR_PUT64_NATIVE(ptr,val) *((U64 * RR_GET_PTR_POST)(ptr)) = (val)
583#define RR_U64_PTR_OFFSET(ptr,offset) ((U64 * RR_GET_PTR_POST)((char *)(ptr) + (offset)))
584#define RR_GET64_NATIVE_OFFSET(ptr,offset) *( RR_U64_PTR_OFFSET((ptr),offset) )
585#define RR_PUT64_NATIVE_OFFSET(ptr,val,offset) *( RR_U64_PTR_OFFSET((ptr),offset)) = (val)
589#ifdef __RADLITTLEENDIAN__
590 #define RR_GET16_LE RR_GET16_NATIVE
591 #define RR_PUT16_LE RR_PUT16_NATIVE
592 #define RR_GET16_LE_OFFSET RR_GET16_NATIVE_OFFSET
593 #define RR_PUT16_LE_OFFSET RR_PUT16_NATIVE_OFFSET
595 #define RR_GET32_LE RR_GET32_NATIVE
596 #define RR_PUT32_LE RR_PUT32_NATIVE
597 #define RR_GET32_LE_OFFSET RR_GET32_NATIVE_OFFSET
598 #define RR_PUT32_LE_OFFSET RR_PUT32_NATIVE_OFFSET
600 #define RR_GET64_LE RR_GET64_NATIVE
601 #define RR_PUT64_LE RR_PUT64_NATIVE
602 #define RR_GET64_LE_OFFSET RR_GET64_NATIVE_OFFSET
603 #define RR_PUT64_LE_OFFSET RR_PUT64_NATIVE_OFFSET
605 #define RR_GET16_BE RR_GET16_NATIVE
606 #define RR_PUT16_BE RR_PUT16_NATIVE
607 #define RR_GET16_BE_OFFSET RR_GET16_NATIVE_OFFSET
608 #define RR_PUT16_BE_OFFSET RR_PUT16_NATIVE_OFFSET
610 #define RR_GET32_BE RR_GET32_NATIVE
611 #define RR_PUT32_BE RR_PUT32_NATIVE
612 #define RR_GET32_BE_OFFSET RR_GET32_NATIVE_OFFSET
613 #define RR_PUT32_BE_OFFSET RR_PUT32_NATIVE_OFFSET
615 #define RR_GET64_BE RR_GET64_NATIVE
616 #define RR_PUT64_BE RR_PUT64_NATIVE
617 #define RR_GET64_BE_OFFSET RR_GET64_NATIVE_OFFSET
618 #define RR_PUT64_BE_OFFSET RR_PUT64_NATIVE_OFFSET
624#if defined(__RADX86__)
626 #if (_MSC_VER >= 1300)
629 #pragma intrinsic(_byteswap_ushort, _byteswap_ulong)
631 #define RR_BSWAP16 _byteswap_ushort
632 #define RR_BSWAP32 _byteswap_ulong
635 #pragma intrinsic(_byteswap_uint64)
636 #define RR_BSWAP64 _byteswap_uint64
637 #elif defined(_MSC_VER)
670 #elif defined(__GNUC__) || defined(__clang__)
674 #define RR_BSWAP16(u16) ( (U16) ( ((u16) >> 8) | ((u16) << 8) ) )
675 #define RR_BSWAP32 __builtin_bswap32
676 #define RR_BSWAP64 __builtin_bswap64
679 #define RR_GET16_BE(ptr) RR_BSWAP16(*((U16 *)(ptr)))
680 #define RR_PUT16_BE(ptr,val) *((U16 *)(ptr)) = (U16) RR_BSWAP16(val)
681 #define RR_GET16_BE_OFFSET(ptr,offset) RR_BSWAP16(*RR_U16_PTR_OFFSET(ptr,offset))
682 #define RR_PUT16_BE_OFFSET(ptr,val,offset) *RR_U16_PTR_OFFSET(ptr,offset) = RR_BSWAP16(val)
684 #define RR_GET32_BE(ptr) RR_BSWAP32(*((U32 *)(ptr)))
685 #define RR_PUT32_BE(ptr,val) *((U32 *)(ptr)) = RR_BSWAP32(val)
686 #define RR_GET32_BE_OFFSET(ptr,offset) RR_BSWAP32(*RR_U32_PTR_OFFSET(ptr,offset))
687 #define RR_PUT32_BE_OFFSET(ptr,val,offset) *RR_U32_PTR_OFFSET(ptr,offset) = RR_BSWAP32(val)
689 #define RR_GET64_BE(ptr) RR_BSWAP64(*((U64 *)(ptr)))
690 #define RR_PUT64_BE(ptr,val) *((U64 *)(ptr)) = RR_BSWAP64(val)
691 #define RR_GET64_BE_OFFSET(ptr,offset) RR_BSWAP64(*RR_U64_PTR_OFFSET(ptr,offset))
692 #define RR_PUT64_BE_OFFSET(ptr,val,offset) *RR_U64_PTR_OFFSET(ptr,offset) = RR_BSWAP64(val)
694#elif defined(__RADIPHONE__) || defined(__RADANDROID__)
699 #define RR_BSWAP16(u16) ( (U16) ( ((u16) >> 8) | ((u16) << 8) ) )
700 #define RR_BSWAP32(u32) ( (U32) ( ((u32) >> 24) | (((u32)<<8) & 0x00FF0000) | (((u32)>>8) & 0x0000FF00) | ((u32) << 24) ) )
701 #define RR_BSWAP64(u64) ( (U64) ( RR_BSWAP32((u64)>>32) | ((U64)RR_BSWAP32((U32)(u64))<<32) ) )
703 #define RR_GET16_BE(ptr) RR_BSWAP16(*((U16 *)(ptr)))
704 #define RR_PUT16_BE(ptr,val) *((U16 *)(ptr)) = RR_BSWAP16(val)
706 #define RR_GET32_BE(ptr) RR_BSWAP32(*((U32 *)(ptr)))
707 #define RR_PUT32_BE(ptr,val) *((U32 *)(ptr)) = RR_BSWAP32(val)
709 #define RR_GET64_BE(ptr) RR_BSWAP64(*((U64 *)(ptr)))
710 #define RR_PUT64_BE(ptr,val) *((U64 *)(ptr)) = RR_BSWAP64(val)
711#elif defined(__RADWINRTAPI__) && defined(__RADARM__)
717 #pragma intrinsic(_byteswap_ushort, _byteswap_ulong)
718 #pragma intrinsic(_byteswap_uint64)
720 #define RR_GET16_BE(ptr) _byteswap_ushort(*((U16 *)(ptr)))
721 #define RR_PUT16_BE(ptr,val) *((U16 *)(ptr)) = _byteswap_ushort(val)
723 #define RR_GET32_BE(ptr) _byteswap_ulong(*((U32 *)(ptr)))
724 #define RR_PUT32_BE(ptr,val) *((U32 *)(ptr)) = _byteswap_ulong(val)
726 #define RR_GET64_BE(ptr) _byteswap_uint64(*((U64 *)(ptr)))
727 #define RR_PUT64_BE(ptr,val) *((U64 *)(ptr)) = _byteswap_uint64(val)
729#elif defined(__clang__) && defined(__RADARM64__)
730 #define RR_BSWAP16 __builtin_bswap16
731 #define RR_BSWAP32 __builtin_bswap32
732 #define RR_BSWAP64 __builtin_bswap64
734 #define RR_GET16_BE(ptr) RR_BSWAP16(*((U16 *)(ptr)))
735 #define RR_PUT16_BE(ptr,val) *((U16 *)(ptr)) = RR_BSWAP16(val)
737 #define RR_GET32_BE(ptr) RR_BSWAP32(*((U32 *)(ptr)))
738 #define RR_PUT32_BE(ptr,val) *((U32 *)(ptr)) = RR_BSWAP32(val)
740 #define RR_GET64_BE(ptr) RR_BSWAP64(*((U64 *)(ptr)))
741 #define RR_PUT64_BE(ptr,val) *((U64 *)(ptr)) = RR_BSWAP64(val)
761#if defined(__RADX86__) || defined(__RADPPC__)
762 #define RR_GET64_BE_UNALIGNED(ptr) RR_GET64_BE(ptr)
763 #define RR_GET64_BE_UNALIGNED_OFFSET(ptr,offset) RR_GET64_BE_OFFSET(ptr,offset)
764 #define RR_GET32_BE_UNALIGNED(ptr) RR_GET32_BE(ptr)
765 #define RR_GET32_BE_UNALIGNED_OFFSET(ptr,offset) RR_GET32_BE_OFFSET(ptr,offset)
766 #define RR_GET16_BE_UNALIGNED(ptr) RR_GET16_BE(ptr)
767 #define RR_GET16_BE_UNALIGNED_OFFSET(ptr,offset) RR_GET16_BE_OFFSET(ptr,offset)
769 #define RR_GET64_LE_UNALIGNED(ptr) RR_GET64_LE(ptr)
770 #define RR_GET64_LE_UNALIGNED_OFFSET(ptr,offset) RR_GET64_LE_OFFSET(ptr,offset)
771 #define RR_GET32_LE_UNALIGNED(ptr) RR_GET32_LE(ptr)
772 #define RR_GET32_LE_UNALIGNED_OFFSET(ptr,offset) RR_GET32_LE_OFFSET(ptr,offset)
773 #define RR_GET16_LE_UNALIGNED(ptr) RR_GET16_LE(ptr)
774 #define RR_GET16_LE_UNALIGNED_OFFSET(ptr,offset) RR_GET16_LE_OFFSET(ptr,offset)
777 #define RR_GET32_BE_UNALIGNED(ptr) ( \
778 ( (U32)(((const U8 * RR_GET_PTR_POST)(ptr)))[0] << 24 ) | \
779 ( (U32)(((const U8 * RR_GET_PTR_POST)(ptr)))[1] << 16 ) | \
780 ( (U32)(((const U8 * RR_GET_PTR_POST)(ptr)))[2] << 8 ) | \
781 ( (U32)(((const U8 * RR_GET_PTR_POST)(ptr)))[3] << 0 ) )
783 #define RR_GET32_BE_UNALIGNED_OFFSET(ptr,offset) ( \
784 ( (U32)(((const U8 * RR_GET_PTR_POST)(ptr))+(offset))[0] << 24 ) | \
785 ( (U32)(((const U8 * RR_GET_PTR_POST)(ptr))+(offset))[1] << 16 ) | \
786 ( (U32)(((const U8 * RR_GET_PTR_POST)(ptr))+(offset))[2] << 8 ) | \
787 ( (U32)(((const U8 * RR_GET_PTR_POST)(ptr))+(offset))[3] << 0 ) )
789 #define RR_GET16_BE_UNALIGNED(ptr) ( \
790 ( (U16)(((const U8 * RR_GET_PTR_POST)(ptr)))[0] << 8 ) | \
791 ( (U16)(((const U8 * RR_GET_PTR_POST)(ptr)))[1] << 0 ) )
793 #define RR_GET16_BE_UNALIGNED_OFFSET(ptr,offset) ( \
794 ( (U16)(((const U8 * RR_GET_PTR_POST)(ptr))+(offset))[0] << 8 ) | \
795 ( (U16)(((const U8 * RR_GET_PTR_POST)(ptr))+(offset))[1] << 0 ) )
797 #define RR_GET32_LE_UNALIGNED(ptr) ( \
798 ( (U32)(((const U8 * RR_GET_PTR_POST)(ptr)))[3] << 24 ) | \
799 ( (U32)(((const U8 * RR_GET_PTR_POST)(ptr)))[2] << 16 ) | \
800 ( (U32)(((const U8 * RR_GET_PTR_POST)(ptr)))[1] << 8 ) | \
801 ( (U32)(((const U8 * RR_GET_PTR_POST)(ptr)))[0] << 0 ) )
803 #define RR_GET32_LE_UNALIGNED_OFFSET(ptr,offset) ( \
804 ( (U32)(((const U8 * RR_GET_PTR_POST)(ptr))+(offset))[3] << 24 ) | \
805 ( (U32)(((const U8 * RR_GET_PTR_POST)(ptr))+(offset))[2] << 16 ) | \
806 ( (U32)(((const U8 * RR_GET_PTR_POST)(ptr))+(offset))[1] << 8 ) | \
807 ( (U32)(((const U8 * RR_GET_PTR_POST)(ptr))+(offset))[0] << 0 ) )
809 #define RR_GET16_LE_UNALIGNED(ptr) ( \
810 ( (U16)(((const U8 * RR_GET_PTR_POST)(ptr)))[1] << 8 ) | \
811 ( (U16)(((const U8 * RR_GET_PTR_POST)(ptr)))[0] << 0 ) )
813 #define RR_GET16_LE_UNALIGNED_OFFSET(ptr,offset) ( \
814 ( (U16)(((const U8 * RR_GET_PTR_POST)(ptr))+(offset))[1] << 8 ) | \
815 ( (U16)(((const U8 * RR_GET_PTR_POST)(ptr))+(offset))[0] << 0 ) )
826 #pragma intrinsic(_lrotl)
827 #define RR_ROTL32(x,k) _lrotl((unsigned long)(x),(int)(k))
832 #define RR_ROTL32(u32v,num) ( ( (u32v) << (num) ) | ( (u32v) >> (32 - (num))) )
840 #if ( defined(_MSC_VER) && _MSC_VER >= 1300)
842 #pragma intrinsic(_rotl64)
843 #define RR_ROTL64(x,k) _rotl64((unsigned __int64)(x),(int)(k))
848 #define RR_ROTL64(u64v,num) ( ( (u64v) << (num) ) | ( (u64v) >> (64 - (num))) )
871 #define RADDEFINEDATA extern "C"
872 #define RADDECLAREDATA extern "C"
874 #define RR_NAMESPACE rr
875 #define RR_NAMESPACE_START namespace RR_NAMESPACE {
876 #define RR_NAMESPACE_END };
877 #define RR_NAMESPACE_USE using namespace RR_NAMESPACE;
879 #define RADDEFINEDATA
880 #define RADDECLAREDATA extern
883 #define RR_NAMESPACE_START
884 #define RR_NAMESPACE_END
885 #define RR_NAMESPACE_USE
#define RAD_UINTa
Definition egttypes.h:452
#define RR_STRING_JOIN(arg1, arg2)
Definition egttypes.h:78
#define RR_COMPILER_ASSERT(exp)
Definition egttypes.h:411
S32 rrbool
Definition egttypes.h:536
#define RADDEFFUNC
Definition egttypes.h:66
#define RADFORCEINLINE
Definition rrCore.h:159
#define RAD_PTRBITS
Definition rrCore.h:14
#define RAD_TWOPTRBYTES
Definition rrCore.h:16
#define RAD_PTRBYTES
Definition rrCore.h:15
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
unsigned long DWORD
Definition MinimalWindowsApi.h:67