macros.h
changeset 1400 09a471f04d17
parent 1394 79cb56d80a3a
child 1556 d7c2d5289be9
equal deleted inserted replaced
1399:61e7c68e9da6 1400:09a471f04d17
    17 
    17 
    18 static inline uint minu(uint a, uint b) { if (a <= b) return a; return b; }
    18 static inline uint minu(uint a, uint b) { if (a <= b) return a; return b; }
    19 static inline uint maxu(uint a, uint b) { if (a >= b) return a; return b; }
    19 static inline uint maxu(uint a, uint b) { if (a >= b) return a; return b; }
    20 
    20 
    21 
    21 
    22 static inline int clamp(int a, int min, int max) { if (a <= min) return min; if (a >= max) return max; return a; }
    22 static inline int clamp(int a, int min, int max)
    23 static inline int clamp2(int a, int min, int max) { if (a <= min) a=min; if (a >= max) a=max; return a; }
    23 {
    24 static inline bool int32_add_overflow(int32 a, int32 b) { return (int32)(a^b)>=0 && (int32)(a^(a+b))<0; }
    24 	if (a <= min) return min;
    25 static inline bool int32_sub_overflow(int32 a, int32 b) { return (int32)(a^b)<0 && (int32)(a^(a-b))<0; }
    25 	if (a >= max) return max;
       
    26 	return a;
       
    27 }
    26 
    28 
    27 
    29 
    28 static inline int32 BIGMULSS(int32 a, int32 b, int shift) {
    30 static inline int32 BIGMULSS(int32 a, int32 b, int shift) {
    29 	return (int32)(((int64)(a) * (int64)(b)) >> (shift));
    31 	return (int32)(((int64)(a) * (int64)(b)) >> (shift));
    30 }
    32 }
   122 
   124 
   123 #define for_each_bit(_i,_b)										\
   125 #define for_each_bit(_i,_b)										\
   124 	for(_i=0; _b!=0; _i++,_b>>=1)								\
   126 	for(_i=0; _b!=0; _i++,_b>>=1)								\
   125 		if (_b&1)
   127 		if (_b&1)
   126 
   128 
   127 #define assert_array(i,j) assert(i < lengthof(j))
       
   128 
       
   129 #define abs myabs
   129 #define abs myabs
   130 
   130 
   131 
   131 
   132 static inline int intxchg_(int *a, int b) { int t = *a; *a = b; return t; }
   132 static inline int intxchg_(int *a, int b) { int t = *a; *a = b; return t; }
   133 #define intxchg(a,b) intxchg_(&(a), (b))
       
   134 #define intswap(a,b) ((b) = intxchg_(&(a), (b)))
   133 #define intswap(a,b) ((b) = intxchg_(&(a), (b)))
   135 
   134 
   136 static inline int myabs(int a) { if (a<0) a = -a; return a; }
   135 static inline int myabs(int a) { if (a<0) a = -a; return a; }
   137 static inline int64 myabs64(int64 a) { if (a<0) a = -a; return a; }
   136 static inline int64 myabs64(int64 a) { if (a<0) a = -a; return a; }
   138 
   137 
   144 
   143 
   145 
   144 
   146 
   145 
   147 #if defined(TTD_LITTLE_ENDIAN)
   146 #if defined(TTD_LITTLE_ENDIAN)
   148 #	define READ_LE_UINT16(b) (*(const uint16*)(b))
   147 #	define READ_LE_UINT16(b) (*(const uint16*)(b))
   149 #	define ADD_WORD(x) (x)&0xFF, ((x) >> 8)&0xFF
       
   150 #	define ADD_DWORD(x) (x)&0xFF, ((x) >> 8)&0xFF, ((x) >> 16)&0xFF, ((x) >> 24)&0xFF
       
   151 #elif defined(TTD_BIG_ENDIAN)
   148 #elif defined(TTD_BIG_ENDIAN)
   152 	static inline uint16 READ_LE_UINT16(const void *b) {
   149 	static inline uint16 READ_LE_UINT16(const void *b) {
   153 		return ((const byte*)b)[0] + (((const byte*)b)[1] << 8);
   150 		return ((const byte*)b)[0] + (((const byte*)b)[1] << 8);
   154 	}
   151 	}
   155 #	define ADD_WORD(x) ((x) >> 8)&0xFF, (x)&0xFF
       
   156 #	define ADD_DWORD(x) ((x) >> 24)&0xFF, ((x) >> 16)&0xFF, ((x) >> 8)&0xFF,  (x)&0xFF
       
   157 #endif
   152 #endif
   158 
   153 
   159 static inline void WRITE_LE_UINT16(void *b, uint16 x) {
   154 static inline void WRITE_LE_UINT16(void *b, uint16 x) {
   160 	((byte*)b)[0] = (byte)x;
   155 	((byte*)b)[0] = (byte)x;
   161 	((byte*)b)[1] = (byte)(x >> 8);
   156 	((byte*)b)[1] = (byte)(x >> 8);