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, int64 num);
00066 UT_API extern void UTswapBytes(int32 *values, int64 num);
00067 UT_API extern void UTswapBytes(int64 *values, int64 num);
00068 UT_API extern void UTswapBytes(fpreal16 *values, int64 num);
00069 UT_API extern void UTswapBytes(fpreal32 *values, int64 num);
00070 UT_API extern void UTswapBytes(fpreal64 *values, int64 num);
00071
00072 UT_API extern void UTswapBytes(int16 *dest, const int16 *src, int64 num);
00073 UT_API extern void UTswapBytes(int32 *dest, const int32 *src, int64 num);
00074 UT_API extern void UTswapBytes(int64 *dest, const int64 *src, int64 num);
00075 UT_API extern void UTswapBytes(fpreal16 *dest, const fpreal16 *src, int64 num);
00076 UT_API extern void UTswapBytes(fpreal32 *dest, const fpreal32 *src, int64 num);
00077 UT_API extern void UTswapBytes(fpreal64 *dest, const fpreal64 *src, int64 num);
00078
00079
00080 UT_API extern void UTswapBytes(fpreal32 *dest, const fpreal64 *src, int64 num);
00081 UT_API extern void UTswapBytes(fpreal64 *dest, const fpreal32 *src, int64 num);
00082
00083 #ifdef SESI_LITTLE_ENDIAN
00084
00085
00086 inline void UTtomips(int16 *values, int64 num) { UTswapBytes(values,num); }
00087 inline void UTtomips(int32 *values, int64 num) { UTswapBytes(values,num); }
00088 inline void UTtomips(int64 *values, int64 num) { UTswapBytes(values,num); }
00089 inline void UTtomips(fpreal32 *values, int64 n) { UTswapBytes(values, n); }
00090 inline void UTtomips(fpreal64 *values, int64 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 *, int64) {}
00102 inline void UTtovax(int32 *, int64) {}
00103 inline void UTtovax(int64 *, int64) {}
00104 inline void UTtovax(fpreal32 *, int64) {}
00105 inline void UTtovax(fpreal64 *, int64) {}
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, int64 num) { UTswapBytes(values, num); }
00120 inline void UTtovax(int32 *values, int64 num) { UTswapBytes(values, num); }
00121 inline void UTtovax(int64 *values, int64 num) { UTswapBytes(values, num); }
00122 inline void UTtovax(fpreal16 *values, int64 n) { UTswapBytes(values, n); }
00123 inline void UTtovax(fpreal32 *values, int64 n) { UTswapBytes(values, n); }
00124 inline void UTtovax(fpreal64 *values, int64 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 *, int64) {}
00137 inline void UTtomips(int32 *, int64) {}
00138 inline void UTtomips(int64 *, int64) {}
00139 inline void UTtomips(fpreal32 *, int64) {}
00140 inline void UTtomips(fpreal64 *, int64) {}
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, uint64 size) \
00156 { memmove(dest, src, size*sizeof(TYPE)); } \
00157 static inline void UTcastFast(TYPE *dest, const TYPE *src, uint64 size) \
00158 { memcpy(dest, src, size*sizeof(TYPE)); } \
00159
00160
00161 #define CAST_DIFFERENT_TYPE(DTYPE, STYPE) \
00162 UT_API void UTcast(DTYPE *dest, const STYPE *src, uint64 size); \
00163 static inline void UTcastFast(DTYPE *dest, const STYPE *src, uint64 size) \
00164 { \
00165 for (uint64 i = 0; i < size; i++) \
00166 dest[i]=(DTYPE)src[i]; \
00167 } \
00168
00169
00170 CAST_SAME_TYPE(int8)
00171 CAST_DIFFERENT_TYPE(int8, uint8)
00172 CAST_DIFFERENT_TYPE(int8, int16)
00173 CAST_DIFFERENT_TYPE(int8, uint16)
00174 CAST_DIFFERENT_TYPE(int8, int32)
00175 CAST_DIFFERENT_TYPE(int8, uint32)
00176 CAST_DIFFERENT_TYPE(int8, int64)
00177 CAST_DIFFERENT_TYPE(int8, uint64)
00178 CAST_DIFFERENT_TYPE(int8, fpreal16)
00179 CAST_DIFFERENT_TYPE(int8, fpreal32)
00180 CAST_DIFFERENT_TYPE(int8, fpreal64)
00181
00182 CAST_DIFFERENT_TYPE(uint8, int8)
00183 CAST_SAME_TYPE(uint8)
00184 CAST_DIFFERENT_TYPE(uint8, int16)
00185 CAST_DIFFERENT_TYPE(uint8, uint16)
00186 CAST_DIFFERENT_TYPE(uint8, int32)
00187 CAST_DIFFERENT_TYPE(uint8, uint32)
00188 CAST_DIFFERENT_TYPE(uint8, int64)
00189 CAST_DIFFERENT_TYPE(uint8, uint64)
00190 CAST_DIFFERENT_TYPE(uint8, fpreal16)
00191 CAST_DIFFERENT_TYPE(uint8, fpreal32)
00192 CAST_DIFFERENT_TYPE(uint8, fpreal64)
00193
00194 CAST_DIFFERENT_TYPE(int16, int8)
00195 CAST_DIFFERENT_TYPE(int16, uint8)
00196 CAST_SAME_TYPE(int16)
00197 CAST_DIFFERENT_TYPE(int16, uint16)
00198 CAST_DIFFERENT_TYPE(int16, int32)
00199 CAST_DIFFERENT_TYPE(int16, uint32)
00200 CAST_DIFFERENT_TYPE(int16, int64)
00201 CAST_DIFFERENT_TYPE(int16, uint64)
00202 CAST_DIFFERENT_TYPE(int16, fpreal16)
00203 CAST_DIFFERENT_TYPE(int16, fpreal32)
00204 CAST_DIFFERENT_TYPE(int16, fpreal64)
00205
00206 CAST_DIFFERENT_TYPE(uint16, int8)
00207 CAST_DIFFERENT_TYPE(uint16, uint8)
00208 CAST_DIFFERENT_TYPE(uint16, int16)
00209 CAST_SAME_TYPE(uint16)
00210 CAST_DIFFERENT_TYPE(uint16, int32)
00211 CAST_DIFFERENT_TYPE(uint16, uint32)
00212 CAST_DIFFERENT_TYPE(uint16, int64)
00213 CAST_DIFFERENT_TYPE(uint16, uint64)
00214 CAST_DIFFERENT_TYPE(uint16, fpreal16)
00215 CAST_DIFFERENT_TYPE(uint16, fpreal32)
00216 CAST_DIFFERENT_TYPE(uint16, fpreal64)
00217
00218 CAST_DIFFERENT_TYPE(int32, int8)
00219 CAST_DIFFERENT_TYPE(int32, uint8)
00220 CAST_DIFFERENT_TYPE(int32, int16)
00221 CAST_DIFFERENT_TYPE(int32, uint16)
00222 CAST_SAME_TYPE(int32)
00223 CAST_DIFFERENT_TYPE(int32, uint32)
00224 CAST_DIFFERENT_TYPE(int32, int64)
00225 CAST_DIFFERENT_TYPE(int32, uint64)
00226 CAST_DIFFERENT_TYPE(int32, fpreal16)
00227 CAST_DIFFERENT_TYPE(int32, fpreal32)
00228 CAST_DIFFERENT_TYPE(int32, fpreal64)
00229
00230 CAST_DIFFERENT_TYPE(uint32, int8)
00231 CAST_DIFFERENT_TYPE(uint32, uint8)
00232 CAST_DIFFERENT_TYPE(uint32, int16)
00233 CAST_DIFFERENT_TYPE(uint32, uint16)
00234 CAST_DIFFERENT_TYPE(uint32, int32)
00235 CAST_SAME_TYPE(uint32)
00236 CAST_DIFFERENT_TYPE(uint32, int64)
00237 CAST_DIFFERENT_TYPE(uint32, uint64)
00238 CAST_DIFFERENT_TYPE(uint32, fpreal16)
00239 CAST_DIFFERENT_TYPE(uint32, fpreal32)
00240 CAST_DIFFERENT_TYPE(uint32, fpreal64)
00241
00242 CAST_DIFFERENT_TYPE(int64, int8)
00243 CAST_DIFFERENT_TYPE(int64, uint8)
00244 CAST_DIFFERENT_TYPE(int64, int16)
00245 CAST_DIFFERENT_TYPE(int64, uint16)
00246 CAST_DIFFERENT_TYPE(int64, int32)
00247 CAST_DIFFERENT_TYPE(int64, uint32)
00248 CAST_SAME_TYPE(int64)
00249 CAST_DIFFERENT_TYPE(int64, uint64)
00250 CAST_DIFFERENT_TYPE(int64, fpreal16)
00251 CAST_DIFFERENT_TYPE(int64, fpreal32)
00252 CAST_DIFFERENT_TYPE(int64, fpreal64)
00253
00254 CAST_DIFFERENT_TYPE(uint64, int8)
00255 CAST_DIFFERENT_TYPE(uint64, uint8)
00256 CAST_DIFFERENT_TYPE(uint64, int16)
00257 CAST_DIFFERENT_TYPE(uint64, uint16)
00258 CAST_DIFFERENT_TYPE(uint64, int32)
00259 CAST_DIFFERENT_TYPE(uint64, uint32)
00260 CAST_DIFFERENT_TYPE(uint64, int64)
00261 CAST_SAME_TYPE(uint64)
00262 CAST_DIFFERENT_TYPE(uint64, fpreal16)
00263 CAST_DIFFERENT_TYPE(uint64, fpreal32)
00264 CAST_DIFFERENT_TYPE(uint64, fpreal64)
00265
00266 CAST_DIFFERENT_TYPE(fpreal16, int8)
00267 CAST_DIFFERENT_TYPE(fpreal16, uint8)
00268 CAST_DIFFERENT_TYPE(fpreal16, int16)
00269 CAST_DIFFERENT_TYPE(fpreal16, uint16)
00270 CAST_DIFFERENT_TYPE(fpreal16, int32)
00271 CAST_DIFFERENT_TYPE(fpreal16, uint32)
00272 CAST_DIFFERENT_TYPE(fpreal16, int64)
00273 CAST_DIFFERENT_TYPE(fpreal16, uint64)
00274 CAST_SAME_TYPE(fpreal16)
00275 CAST_DIFFERENT_TYPE(fpreal16, fpreal32)
00276 CAST_DIFFERENT_TYPE(fpreal16, fpreal64)
00277
00278 CAST_DIFFERENT_TYPE(fpreal32, int8)
00279 CAST_DIFFERENT_TYPE(fpreal32, uint8)
00280 CAST_DIFFERENT_TYPE(fpreal32, int16)
00281 CAST_DIFFERENT_TYPE(fpreal32, uint16)
00282 CAST_DIFFERENT_TYPE(fpreal32, int32)
00283 CAST_DIFFERENT_TYPE(fpreal32, uint32)
00284 CAST_DIFFERENT_TYPE(fpreal32, int64)
00285 CAST_DIFFERENT_TYPE(fpreal32, uint64)
00286 CAST_DIFFERENT_TYPE(fpreal32, fpreal16)
00287 CAST_SAME_TYPE(fpreal32)
00288 CAST_DIFFERENT_TYPE(fpreal32, fpreal64)
00289
00290 CAST_DIFFERENT_TYPE(fpreal64, int8)
00291 CAST_DIFFERENT_TYPE(fpreal64, uint8)
00292 CAST_DIFFERENT_TYPE(fpreal64, int16)
00293 CAST_DIFFERENT_TYPE(fpreal64, uint16)
00294 CAST_DIFFERENT_TYPE(fpreal64, int32)
00295 CAST_DIFFERENT_TYPE(fpreal64, uint32)
00296 CAST_DIFFERENT_TYPE(fpreal64, int64)
00297 CAST_DIFFERENT_TYPE(fpreal64, uint64)
00298 CAST_DIFFERENT_TYPE(fpreal64, fpreal16)
00299 CAST_DIFFERENT_TYPE(fpreal64, fpreal32)
00300 CAST_SAME_TYPE(fpreal64)
00301
00302 #undef CAST_SAME_TYPE
00303 #undef CAST_DIFFERENT_TYPE
00304
00305 #endif