00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043 #ifndef __UT_Endian_h__
00044 #define __UT_Endian_h__
00045
00046 #include "UT_API.h"
00047 #include <string.h>
00048 #include <SYS/SYS_Types.h>
00049
00050 #define UTswap_int16(x,z) { x = (((z & 0xff) << 8) | ((z >> 8) & 0xff)); }
00051 #define UTswap_int32(x,z) { x = ((z & 0xff) << 24) | ((z & 0xff00) << 8) \
00052 | ((z >> 8) & 0xff00) | ((z >> 24) & 0xff); }
00053 #define UTswap_int64(x,z) { x = (((((z ) & 0xff) << 56) | \
00054 (((z >> 8) & 0xff) << 48) | \
00055 (((z >> 16) & 0xff) << 40) | \
00056 (((z >> 24) & 0xff) << 32) | \
00057 (((z >> 32) & 0xff) << 24) | \
00058 (((z >> 40) & 0xff) << 16) | \
00059 (((z >> 48) & 0xff) << 8) | \
00060 (((z >> 56) & 0xff) ))); }
00061 #define UTswap_int16_inplace(z) UTswap_int16(z,z)
00062 #define UTswap_int32_inplace(z) UTswap_int32(z,z)
00063 #define UTswap_int64_inplace(z) UTswap_int64(z,z)
00064
00065 UT_API extern void UTswapBytes(int16 *values, int num);
00066 UT_API extern void UTswapBytes(int32 *values, int num);
00067 UT_API extern void UTswapBytes(int64 *values, int num);
00068 UT_API extern void UTswapBytes(fpreal16 *values, int num);
00069 UT_API extern void UTswapBytes(fpreal32 *values, int num);
00070 UT_API extern void UTswapBytes(fpreal64 *values, int num);
00071
00072 UT_API extern void UTswapBytes(int16 *dest, const int16 *src, int num);
00073 UT_API extern void UTswapBytes(int32 *dest, const int32 *src, int num);
00074 UT_API extern void UTswapBytes(int64 *dest, const int64 *src, int num);
00075 UT_API extern void UTswapBytes(fpreal16 *dest, const fpreal16 *src, int num);
00076 UT_API extern void UTswapBytes(fpreal32 *dest, const fpreal32 *src, int num);
00077 UT_API extern void UTswapBytes(fpreal64 *dest, const fpreal64 *src, int num);
00078
00079
00080 UT_API extern void UTswapBytes(fpreal32 *dest, const fpreal64 *src, int num);
00081 UT_API extern void UTswapBytes(fpreal64 *dest, const fpreal32 *src, int num);
00082
00083 #ifdef SESI_LITTLE_ENDIAN
00084
00085
00086 inline void UTtomips(int16 *values, int num) { UTswapBytes(values,num); }
00087 inline void UTtomips(int32 *values, int num) { UTswapBytes(values,num); }
00088 inline void UTtomips(int64 *values, int num) { UTswapBytes(values,num); }
00089 inline void UTtomips(fpreal32 *values, int n) { UTswapBytes(values, n); }
00090 inline void UTtomips(fpreal64 *values, int n) { UTswapBytes(values, n); }
00091
00092 inline void UTtomips(int16 &z) UTswap_int16(z, z)
00093 inline void UTtomips(uint16 &z) UTswap_int16(z, z)
00094 inline void UTtomips(int32 &z) UTswap_int32(z, z)
00095 inline void UTtomips(uint32 &z) UTswap_int32(z, z)
00096 inline void UTtomips(int64 &z) { UTswapBytes(&z,1); }
00097 inline void UTtomips(uint64 &z) { UTswapBytes((int64*)&z,1); }
00098 inline void UTtomips(fpreal32 &z) { UTtomips(*(uint32 *)&z); }
00099 inline void UTtomips(fpreal64 &z) { UTswapBytes(&z, 1); }
00100
00101 inline void UTtovax(int16 *, int) {}
00102 inline void UTtovax(int32 *, int) {}
00103 inline void UTtovax(int64 *, int) {}
00104 inline void UTtovax(fpreal32 *,int) {}
00105 inline void UTtovax(fpreal64 *,int) {}
00106
00107 inline void UTtovax(int16) {}
00108 inline void UTtovax(uint16) {}
00109 inline void UTtovax(int32) {}
00110 inline void UTtovax(uint32) {}
00111 inline void UTtovax(int64) {}
00112 inline void UTtovax(uint64) {}
00113 inline void UTtovax(fpreal32) {}
00114 inline void UTtovax(fpreal64) {}
00115
00116 #else
00117
00118
00119 inline void UTtovax(int16 *values, int num) { UTswapBytes(values, num); }
00120 inline void UTtovax(int32 *values, int num) { UTswapBytes(values, num); }
00121 inline void UTtovax(int64 *values, int num) { UTswapBytes(values, num); }
00122 inline void UTtovax(fpreal16 *values, int n) { UTswapBytes(values, n); }
00123 inline void UTtovax(fpreal32 *values, int n) { UTswapBytes(values, n); }
00124 inline void UTtovax(fpreal64 *values, int n) { UTswapBytes(values, n); }
00125
00126 inline void UTtovax(int16 &z) UTswap_int16(z, z)
00127 inline void UTtovax(uint16 &z) UTswap_int16(z, z)
00128 inline void UTtovax(int32 &z) UTswap_int32(z, z)
00129 inline void UTtovax(uint32 &z) UTswap_int32(z, z)
00130 inline void UTtovax(int64 &z) { UTswapBytes(&z,1); }
00131 inline void UTtovax(uint64 &z) { UTswapBytes((int64*)&z, 1); }
00132 inline void UTtovax(fpreal16 &z) { UTtovax(*(uint16 *)&z); }
00133 inline void UTtovax(fpreal32 &z) { UTtovax(*(uint32 *)&z); }
00134 inline void UTtovax(fpreal64 &z) { UTswapBytes(&z, 1); }
00135
00136 inline void UTtomips(int16 *, int) {}
00137 inline void UTtomips(int32 *, int) {}
00138 inline void UTtomips(int64 *, int) {}
00139 inline void UTtomips(fpreal32 *, int) {}
00140 inline void UTtomips(fpreal64 *,int) {}
00141
00142 inline void UTtomips(int16 &) {}
00143 inline void UTtomips(uint16 &) {}
00144 inline void UTtomips(int32 &) {}
00145 inline void UTtomips(uint32 &) {}
00146 inline void UTtomips(int64 &) {}
00147 inline void UTtomips(uint64 &) {}
00148 inline void UTtomips(fpreal32 &) {}
00149 inline void UTtomips(fpreal64 &) {}
00150
00151 #endif // End of the defines
00152
00153
00154 #define CAST_SAME_TYPE(TYPE) \
00155 inline static void UTcast(TYPE *dest, const TYPE *src, uint size) \
00156 { memmove(dest, src, size*sizeof(TYPE)); } \
00157 static inline void UTcastFast(TYPE *dest, const TYPE *src, uint size) \
00158 { memcpy(dest, src, size*sizeof(TYPE)); }
00159
00160 #define CAST_DIFFERENT_TYPE(DTYPE, STYPE) \
00161 UT_API void UTcast(DTYPE *dest, const STYPE *src, uint size); \
00162 static inline void UTcastFast(DTYPE *dest, const STYPE *src, uint size) \
00163 { int i; \
00164 for (i=0; i < size; i++) \
00165 dest[i]=(DTYPE)src[i]; \
00166 }
00167
00168 CAST_SAME_TYPE(int8)
00169 CAST_DIFFERENT_TYPE(int8, uint8)
00170 CAST_DIFFERENT_TYPE(int8, int16)
00171 CAST_DIFFERENT_TYPE(int8, uint16)
00172 CAST_DIFFERENT_TYPE(int8, int32)
00173 CAST_DIFFERENT_TYPE(int8, uint32)
00174 CAST_DIFFERENT_TYPE(int8, int64)
00175 CAST_DIFFERENT_TYPE(int8, uint64)
00176 CAST_DIFFERENT_TYPE(int8, fpreal16)
00177 CAST_DIFFERENT_TYPE(int8, fpreal32)
00178 CAST_DIFFERENT_TYPE(int8, fpreal64)
00179
00180 CAST_DIFFERENT_TYPE(uint8, int8)
00181 CAST_SAME_TYPE(uint8)
00182 CAST_DIFFERENT_TYPE(uint8, int16)
00183 CAST_DIFFERENT_TYPE(uint8, uint16)
00184 CAST_DIFFERENT_TYPE(uint8, int32)
00185 CAST_DIFFERENT_TYPE(uint8, uint32)
00186 CAST_DIFFERENT_TYPE(uint8, int64)
00187 CAST_DIFFERENT_TYPE(uint8, uint64)
00188 CAST_DIFFERENT_TYPE(uint8, fpreal16)
00189 CAST_DIFFERENT_TYPE(uint8, fpreal32)
00190 CAST_DIFFERENT_TYPE(uint8, fpreal64)
00191
00192 CAST_DIFFERENT_TYPE(int16, int8)
00193 CAST_DIFFERENT_TYPE(int16, uint8)
00194 CAST_SAME_TYPE(int16)
00195 CAST_DIFFERENT_TYPE(int16, uint16)
00196 CAST_DIFFERENT_TYPE(int16, int32)
00197 CAST_DIFFERENT_TYPE(int16, uint32)
00198 CAST_DIFFERENT_TYPE(int16, int64)
00199 CAST_DIFFERENT_TYPE(int16, uint64)
00200 CAST_DIFFERENT_TYPE(int16, fpreal16)
00201 CAST_DIFFERENT_TYPE(int16, fpreal32)
00202 CAST_DIFFERENT_TYPE(int16, fpreal64)
00203
00204 CAST_DIFFERENT_TYPE(uint16, int8)
00205 CAST_DIFFERENT_TYPE(uint16, uint8)
00206 CAST_DIFFERENT_TYPE(uint16, int16)
00207 CAST_SAME_TYPE(uint16)
00208 CAST_DIFFERENT_TYPE(uint16, int32)
00209 CAST_DIFFERENT_TYPE(uint16, uint32)
00210 CAST_DIFFERENT_TYPE(uint16, int64)
00211 CAST_DIFFERENT_TYPE(uint16, uint64)
00212 CAST_DIFFERENT_TYPE(uint16, fpreal16)
00213 CAST_DIFFERENT_TYPE(uint16, fpreal32)
00214 CAST_DIFFERENT_TYPE(uint16, fpreal64)
00215
00216 CAST_DIFFERENT_TYPE(int32, int8)
00217 CAST_DIFFERENT_TYPE(int32, uint8)
00218 CAST_DIFFERENT_TYPE(int32, int16)
00219 CAST_DIFFERENT_TYPE(int32, uint16)
00220 CAST_SAME_TYPE(int32)
00221 CAST_DIFFERENT_TYPE(int32, uint32)
00222 CAST_DIFFERENT_TYPE(int32, int64)
00223 CAST_DIFFERENT_TYPE(int32, uint64)
00224 CAST_DIFFERENT_TYPE(int32, fpreal16)
00225 CAST_DIFFERENT_TYPE(int32, fpreal32)
00226 CAST_DIFFERENT_TYPE(int32, fpreal64)
00227
00228 CAST_DIFFERENT_TYPE(uint32, int8)
00229 CAST_DIFFERENT_TYPE(uint32, uint8)
00230 CAST_DIFFERENT_TYPE(uint32, int16)
00231 CAST_DIFFERENT_TYPE(uint32, uint16)
00232 CAST_DIFFERENT_TYPE(uint32, int32)
00233 CAST_SAME_TYPE(uint32)
00234 CAST_DIFFERENT_TYPE(uint32, int64)
00235 CAST_DIFFERENT_TYPE(uint32, uint64)
00236 CAST_DIFFERENT_TYPE(uint32, fpreal16)
00237 CAST_DIFFERENT_TYPE(uint32, fpreal32)
00238 CAST_DIFFERENT_TYPE(uint32, fpreal64)
00239
00240 CAST_DIFFERENT_TYPE(int64, int8)
00241 CAST_DIFFERENT_TYPE(int64, uint8)
00242 CAST_DIFFERENT_TYPE(int64, int16)
00243 CAST_DIFFERENT_TYPE(int64, uint16)
00244 CAST_DIFFERENT_TYPE(int64, int32)
00245 CAST_DIFFERENT_TYPE(int64, uint32)
00246 CAST_SAME_TYPE(int64)
00247 CAST_DIFFERENT_TYPE(int64, uint64)
00248 CAST_DIFFERENT_TYPE(int64, fpreal16)
00249 CAST_DIFFERENT_TYPE(int64, fpreal32)
00250 CAST_DIFFERENT_TYPE(int64, fpreal64)
00251
00252 CAST_DIFFERENT_TYPE(uint64, int8)
00253 CAST_DIFFERENT_TYPE(uint64, uint8)
00254 CAST_DIFFERENT_TYPE(uint64, int16)
00255 CAST_DIFFERENT_TYPE(uint64, uint16)
00256 CAST_DIFFERENT_TYPE(uint64, int32)
00257 CAST_DIFFERENT_TYPE(uint64, uint32)
00258 CAST_DIFFERENT_TYPE(uint64, int64)
00259 CAST_SAME_TYPE(uint64)
00260 CAST_DIFFERENT_TYPE(uint64, fpreal16)
00261 CAST_DIFFERENT_TYPE(uint64, fpreal32)
00262 CAST_DIFFERENT_TYPE(uint64, fpreal64)
00263
00264 CAST_DIFFERENT_TYPE(fpreal16, int8)
00265 CAST_DIFFERENT_TYPE(fpreal16, uint8)
00266 CAST_DIFFERENT_TYPE(fpreal16, int16)
00267 CAST_DIFFERENT_TYPE(fpreal16, uint16)
00268 CAST_DIFFERENT_TYPE(fpreal16, int32)
00269 CAST_DIFFERENT_TYPE(fpreal16, uint32)
00270 CAST_DIFFERENT_TYPE(fpreal16, int64)
00271 CAST_DIFFERENT_TYPE(fpreal16, uint64)
00272 CAST_SAME_TYPE(fpreal16)
00273 CAST_DIFFERENT_TYPE(fpreal16, fpreal32)
00274 CAST_DIFFERENT_TYPE(fpreal16, fpreal64)
00275
00276 CAST_DIFFERENT_TYPE(fpreal32, int8)
00277 CAST_DIFFERENT_TYPE(fpreal32, uint8)
00278 CAST_DIFFERENT_TYPE(fpreal32, int16)
00279 CAST_DIFFERENT_TYPE(fpreal32, uint16)
00280 CAST_DIFFERENT_TYPE(fpreal32, int32)
00281 CAST_DIFFERENT_TYPE(fpreal32, uint32)
00282 CAST_DIFFERENT_TYPE(fpreal32, int64)
00283 CAST_DIFFERENT_TYPE(fpreal32, uint64)
00284 CAST_DIFFERENT_TYPE(fpreal32, fpreal16)
00285 CAST_SAME_TYPE(fpreal32)
00286 CAST_DIFFERENT_TYPE(fpreal32, fpreal64)
00287
00288 CAST_DIFFERENT_TYPE(fpreal64, int8)
00289 CAST_DIFFERENT_TYPE(fpreal64, uint8)
00290 CAST_DIFFERENT_TYPE(fpreal64, int16)
00291 CAST_DIFFERENT_TYPE(fpreal64, uint16)
00292 CAST_DIFFERENT_TYPE(fpreal64, int32)
00293 CAST_DIFFERENT_TYPE(fpreal64, uint32)
00294 CAST_DIFFERENT_TYPE(fpreal64, int64)
00295 CAST_DIFFERENT_TYPE(fpreal64, uint64)
00296 CAST_DIFFERENT_TYPE(fpreal64, fpreal16)
00297 CAST_DIFFERENT_TYPE(fpreal64, fpreal32)
00298 CAST_SAME_TYPE(fpreal64)
00299
00300 #undef CAST_SAME_TYPE
00301 #undef CAST_DIFFERENT_TYPE
00302
00303 #endif