1#ifndef NW_G3D_UT_INLINES_H_
2#define NW_G3D_UT_INLINES_H_
4#include <nw/g3d/g3d_config.h>
8namespace nw {
namespace g3d {
namespace ut {
18 return ((size - 1) & size) == 0;
23 return static_cast<
char*>(ptr) + offset;
27const void*
AddOffset(
const void* ptr, size_t offset)
29 return static_cast<
const char*>(ptr) + offset;
32template <
typename ResultT>
36 return static_cast<ResultT*>(AddOffset(ptr, offset));
39template <
typename ResultT>
41const ResultT*
AddOffset(
const void* ptr, size_t offset)
43 return static_cast<
const ResultT*>(AddOffset(ptr, offset));
49 size_t mask = alignment - 1;
50 return (size + mask) & ~mask;
56 return reinterpret_cast<
void*>(Align(
reinterpret_cast<size_t>(ptr), alignment));
62 return reinterpret_cast<
void*>(Align(
reinterpret_cast<size_t>(ptr), alignment));
69 return (size & (alignment - 1)) == 0;
75 return IsAligned(
reinterpret_cast<size_t>(ptr), alignment);
85 return ((*addr << 24) & 0xFF000000) | ((*addr << 8) & 0x00FF0000) |
86 ((*addr >> 8) & 0x0000FF00) | ((*addr >> 24) & 0x000000FF);
96 *addr = ((data << 24) & 0xFF000000) | ((data << 8) & 0x00FF0000) |
97 ((data >> 8) & 0x0000FF00) | ((data >> 24) & 0x000000FF);
104#if defined( __ghs__ )
109 return ((*addr << 8) & 0xFF00) | ((*addr >> 8) & 0x00FF);
116#if defined( __ghs__ )
117 __sthbrx(addr, data);
119 *addr = ((data << 8) & 0xFF00) | ((data >> 8) & 0x00FF);
125void Copy32(
void* pDst,
const void* pSrc,
int count)
131 const bit32* src =
static_cast<
const bit32*>(pSrc);
132 for (
const bit32* end = src + count; src != end; ++dst, ++src)
140 memcpy(pDst, pSrc,
sizeof(
bit32) *
static_cast<size_t>(count));
144template <
typename DstT,
typename SrcT>
151#if defined( __ghs__ )
154 return static_cast<
s16>(
x);
162#if defined( __ghs__ )
165 return static_cast<
u16>(
x);
173#if defined( __ghs__ )
176 return static_cast<
s8>(
x);
184#if defined( __ghs__ )
187 return static_cast<
u8>(
x);
195#if defined( __ghs__ )
198 return static_cast<
float>(
x);
206#if defined( __ghs__ )
209 return static_cast<
float>(
x);
217#if defined( __ghs__ )
220 return static_cast<
float>(
x);
228#if defined( __ghs__ )
231 return static_cast<
float>(
x);
235template <
typename DstT,
typename SrcT>
274 x = (x & 0x55555555) + (x >> 1 & 0x55555555);
275 x = (x & 0x33333333) + (x >> 2 & 0x33333333);
276 x = (x & 0x0F0F0F0F) + (x >> 4 & 0x0F0F0F0F);
277 x = (x & 0x00FF00FF) + (x >> 8 & 0x00FF00FF);
278 x = (x & 0x0000FFFF) + (x >> 16 & 0x0000FFFF);
279 return static_cast<
int>(x);
285#if defined( __ghs__ )
300#if defined( __ghs__ )
301 return 32 - CountLeadingZeros(~x & (x - 1));
#define NW_G3D_ASSERT(exp)
Definition g3d_assert.h:17
#define NW_G3D_IS_HOST_CAFE
Definition g3d_defs.h:20
#define NW_G3D_FORCE_INLINE
Definition g3d_defs.h:66
u32 bit32
Definition g3d_defs.h:131
Definition g3d_Inlines.h:8
NW_G3D_FORCE_INLINE int CountOnes(bit32 x)
Definition g3d_Inlines.h:272
NW_G3D_FORCE_INLINE bool IsPowerOfTwo(size_t size)
Definition g3d_Inlines.h:16
NW_G3D_FORCE_INLINE bool IsAligned(const void *ptr, size_t alignment=DEFAULT_ALIGNMENT)
Definition g3d_Inlines.h:73
NW_G3D_FORCE_INLINE DstT StaticCast(SrcT x)
Definition g3d_Inlines.h:237
NW_G3D_FORCE_INLINE const void * AddOffset(const void *ptr, size_t offset)
Definition g3d_Inlines.h:27
NW_G3D_FORCE_INLINE int CountTrailingZeros(bit32 x)
Definition g3d_Inlines.h:298
NW_G3D_FORCE_INLINE void StoreRevU32(u32 *addr, u32 data)
Definition g3d_Inlines.h:91
NW_G3D_FORCE_INLINE const ResultT * AddOffset(const void *ptr, size_t offset)
Definition g3d_Inlines.h:41
NW_G3D_FORCE_INLINE void StoreRevU16(u16 *addr, u16 data)
Definition g3d_Inlines.h:114
NW_G3D_FORCE_INLINE const void * Align(const void *ptr, size_t alignment=DEFAULT_ALIGNMENT)
Definition g3d_Inlines.h:60
NW_G3D_FORCE_INLINE void Copy32(void *pDst, const void *pSrc, int count)
Definition g3d_Inlines.h:125
NW_G3D_FORCE_INLINE u32 LoadRevU32(const u32 *addr)
Definition g3d_Inlines.h:78
NW_G3D_FORCE_INLINE void * Align(void *ptr, size_t alignment=DEFAULT_ALIGNMENT)
Definition g3d_Inlines.h:54
NW_G3D_FORCE_INLINE int CountLeadingZeros(bit32 x)
Definition g3d_Inlines.h:283
NW_G3D_FORCE_INLINE ResultT * AddOffset(void *ptr, size_t offset)
Definition g3d_Inlines.h:34
NW_G3D_FORCE_INLINE bool IsAligned(size_t size, size_t alignment=DEFAULT_ALIGNMENT)
Definition g3d_Inlines.h:66
NW_G3D_FORCE_INLINE void * AddOffset(void *ptr, size_t offset)
Definition g3d_Inlines.h:21
NW_G3D_FORCE_INLINE size_t Align(size_t size, size_t alignment=DEFAULT_ALIGNMENT)
Definition g3d_Inlines.h:46
@ DEFAULT_ALIGNMENT
Definition g3d_Inlines.h:12
NW_G3D_FORCE_INLINE u16 LoadRevU16(const u16 *addr)
Definition g3d_Inlines.h:102
Definition g3d_GfxManage.cpp:10