00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #pragma once
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #define mi_sint1korr(A) ((int8_t)(*A))
00027
00028 #define mi_sint2korr(A) ((int16_t) (((int16_t) (((const unsigned char*) (A))[1])) +\
00029 ((int16_t) ((int16_t) ((const char*) (A))[0]) << 8)))
00030 #define mi_sint3korr(A) ((int32_t) (((((const unsigned char*) (A))[0]) & 128) ? \
00031 (((uint32_t) 255L << 24) | \
00032 (((uint32_t) ((const unsigned char*) (A))[0]) << 16) |\
00033 (((uint32_t) ((const unsigned char*) (A))[1]) << 8) | \
00034 ((uint32_t) ((const unsigned char*) (A))[2])) : \
00035 (((uint32_t) ((const unsigned char*) (A))[0]) << 16) |\
00036 (((uint32_t) ((const unsigned char*) (A))[1]) << 8) | \
00037 ((uint32_t) ((const unsigned char*) (A))[2])))
00038 #define mi_sint4korr(A) ((int32_t) (((int32_t) (((const unsigned char*) (A))[3])) +\
00039 ((int32_t) (((const unsigned char*) (A))[2]) << 8) +\
00040 ((int32_t) (((const unsigned char*) (A))[1]) << 16) +\
00041 ((int32_t) ((int16_t) ((const char*) (A))[0]) << 24)))
00042 #define mi_sint8korr(A) ((int64_t) mi_uint8korr(A))
00043 #define mi_uint2korr(A) ((uint16_t) (((uint16_t) (((const unsigned char*) (A))[1])) +\
00044 ((uint16_t) (((const unsigned char*) (A))[0]) << 8)))
00045 #define mi_uint3korr(A) ((uint32_t) (((uint32_t) (((const unsigned char*) (A))[2])) +\
00046 (((uint32_t) (((const unsigned char*) (A))[1])) << 8) +\
00047 (((uint32_t) (((const unsigned char*) (A))[0])) << 16)))
00048 #define mi_uint4korr(A) ((uint32_t) (((uint32_t) (((const unsigned char*) (A))[3])) +\
00049 (((uint32_t) (((const unsigned char*) (A))[2])) << 8) +\
00050 (((uint32_t) (((const unsigned char*) (A))[1])) << 16) +\
00051 (((uint32_t) (((const unsigned char*) (A))[0])) << 24)))
00052 #define mi_uint5korr(A) ((uint64_t)(((uint32_t) (((const unsigned char*) (A))[4])) +\
00053 (((uint32_t) (((const unsigned char*) (A))[3])) << 8) +\
00054 (((uint32_t) (((const unsigned char*) (A))[2])) << 16) +\
00055 (((uint32_t) (((const unsigned char*) (A))[1])) << 24)) +\
00056 (((uint64_t) (((const unsigned char*) (A))[0])) << 32))
00057 #define mi_uint6korr(A) ((uint64_t)(((uint32_t) (((const unsigned char*) (A))[5])) +\
00058 (((uint32_t) (((const unsigned char*) (A))[4])) << 8) +\
00059 (((uint32_t) (((const unsigned char*) (A))[3])) << 16) +\
00060 (((uint32_t) (((const unsigned char*) (A))[2])) << 24)) +\
00061 (((uint64_t) (((uint32_t) (((const unsigned char*) (A))[1])) +\
00062 (((uint32_t) (((const unsigned char*) (A))[0]) << 8)))) <<\
00063 32))
00064 #define mi_uint7korr(A) ((uint64_t)(((uint32_t) (((const unsigned char*) (A))[6])) +\
00065 (((uint32_t) (((const unsigned char*) (A))[5])) << 8) +\
00066 (((uint32_t) (((const unsigned char*) (A))[4])) << 16) +\
00067 (((uint32_t) (((const unsigned char*) (A))[3])) << 24)) +\
00068 (((uint64_t) (((uint32_t) (((const unsigned char*) (A))[2])) +\
00069 (((uint32_t) (((const unsigned char*) (A))[1])) << 8) +\
00070 (((uint32_t) (((const unsigned char*) (A))[0])) << 16))) <<\
00071 32))
00072 #define mi_uint8korr(A) ((uint64_t)(((uint32_t) (((const unsigned char*) (A))[7])) +\
00073 (((uint32_t) (((const unsigned char*) (A))[6])) << 8) +\
00074 (((uint32_t) (((const unsigned char*) (A))[5])) << 16) +\
00075 (((uint32_t) (((const unsigned char*) (A))[4])) << 24)) +\
00076 (((uint64_t) (((uint32_t) (((const unsigned char*) (A))[3])) +\
00077 (((uint32_t) (((const unsigned char*) (A))[2])) << 8) +\
00078 (((uint32_t) (((const unsigned char*) (A))[1])) << 16) +\
00079 (((uint32_t) (((const unsigned char*) (A))[0])) << 24))) <<\
00080 32))
00081
00082
00083 #define mi_int1store(T,A) *((unsigned char*)(T))= (unsigned char) (A)
00084
00085 #define mi_int2store(T,A) { uint32_t def_temp= (uint32_t) (A) ;\
00086 ((unsigned char*) (T))[1]= (unsigned char) (def_temp);\
00087 ((unsigned char*) (T))[0]= (unsigned char) (def_temp >> 8); }
00088 #define mi_int3store(T,A) { \
00089 uint32_t def_temp= (uint32_t) (A);\
00090 ((unsigned char*) (T))[2]= (unsigned char) (def_temp);\
00091 ((unsigned char*) (T))[1]= (unsigned char) (def_temp >> 8);\
00092 ((unsigned char*) (T))[0]= (unsigned char) (def_temp >> 16);\
00093 }
00094 #define mi_int4store(T,A) { uint32_t def_temp= (uint32_t) (A);\
00095 ((unsigned char*) (T))[3]= (unsigned char) (def_temp);\
00096 ((unsigned char*) (T))[2]= (unsigned char) (def_temp >> 8);\
00097 ((unsigned char*) (T))[1]= (unsigned char) (def_temp >> 16);\
00098 ((unsigned char*) (T))[0]= (unsigned char) (def_temp >> 24); }
00099 #define mi_int5store(T,A) { uint32_t def_temp= (uint32_t) (A),\
00100 def_temp2= (uint32_t) ((A) >> 32);\
00101 ((unsigned char*) (T))[4]= (unsigned char) (def_temp);\
00102 ((unsigned char*) (T))[3]= (unsigned char) (def_temp >> 8);\
00103 ((unsigned char*) (T))[2]= (unsigned char) (def_temp >> 16);\
00104 ((unsigned char*) (T))[1]= (unsigned char) (def_temp >> 24);\
00105 ((unsigned char*) (T))[0]= (unsigned char) (def_temp2); }
00106 #define mi_int6store(T,A) { uint32_t def_temp= (uint32_t) (A),\
00107 def_temp2= (uint32_t) ((A) >> 32);\
00108 ((unsigned char*) (T))[5]= (unsigned char) (def_temp);\
00109 ((unsigned char*) (T))[4]= (unsigned char) (def_temp >> 8);\
00110 ((unsigned char*) (T))[3]= (unsigned char) (def_temp >> 16);\
00111 ((unsigned char*) (T))[2]= (unsigned char) (def_temp >> 24);\
00112 ((unsigned char*) (T))[1]= (unsigned char) (def_temp2);\
00113 ((unsigned char*) (T))[0]= (unsigned char) (def_temp2 >> 8); }
00114 #define mi_int7store(T,A) { uint32_t def_temp= (uint32_t) (A),\
00115 def_temp2= (uint32_t) ((A) >> 32);\
00116 ((unsigned char*) (T))[6]= (unsigned char) (def_temp);\
00117 ((unsigned char*) (T))[5]= (unsigned char) (def_temp >> 8);\
00118 ((unsigned char*) (T))[4]= (unsigned char) (def_temp >> 16);\
00119 ((unsigned char*) (T))[3]= (unsigned char) (def_temp >> 24);\
00120 ((unsigned char*) (T))[2]= (unsigned char) (def_temp2);\
00121 ((unsigned char*) (T))[1]= (unsigned char) (def_temp2 >> 8);\
00122 ((unsigned char*) (T))[0]= (unsigned char) (def_temp2 >> 16); }
00123 #define mi_int8store(T,A) { uint32_t def_temp3= (uint32_t) (A),\
00124 def_temp4= (uint32_t) ((A) >> 32);\
00125 mi_int4store((unsigned char*) (T) + 0, def_temp4);\
00126 mi_int4store((unsigned char*) (T) + 4, def_temp3); }
00127
00128 #ifdef WORDS_BIGENDIAN
00129
00130 #define mi_float4get(V,M) { float def_temp;\
00131 ((unsigned char*) &def_temp)[0]= ((const unsigned char*) (M))[0];\
00132 ((unsigned char*) &def_temp)[1]= ((const unsigned char*) (M))[1];\
00133 ((unsigned char*) &def_temp)[2]= ((const unsigned char*) (M))[2];\
00134 ((unsigned char*) &def_temp)[3]= ((const unsigned char*) (M))[3];\
00135 (V)= def_temp; }
00136
00137 #define mi_float8get(V,M) { double def_temp;\
00138 ((unsigned char*) &def_temp)[0]= ((unsigned char*) (M))[0];\
00139 ((unsigned char*) &def_temp)[1]= ((unsigned char*) (M))[1];\
00140 ((unsigned char*) &def_temp)[2]= ((unsigned char*) (M))[2];\
00141 ((unsigned char*) &def_temp)[3]= ((unsigned char*) (M))[3];\
00142 ((unsigned char*) &def_temp)[4]= ((unsigned char*) (M))[4];\
00143 ((unsigned char*) &def_temp)[5]= ((unsigned char*) (M))[5];\
00144 ((unsigned char*) &def_temp)[6]= ((unsigned char*) (M))[6];\
00145 ((unsigned char*) &def_temp)[7]= ((unsigned char*) (M))[7]; \
00146 (V)= def_temp; }
00147 #else
00148
00149 #define mi_float4get(V,M) { float def_temp;\
00150 ((unsigned char*) &def_temp)[0]= ((unsigned char*) (M))[3];\
00151 ((unsigned char*) &def_temp)[1]= ((unsigned char*) (M))[2];\
00152 ((unsigned char*) &def_temp)[2]= ((unsigned char*) (M))[1];\
00153 ((unsigned char*) &def_temp)[3]= ((unsigned char*) (M))[0];\
00154 (V)= def_temp; }
00155
00156 #if defined(__FLOAT_WORD_ORDER) && (__FLOAT_WORD_ORDER == __BIG_ENDIAN)
00157
00158 #define mi_float8get(V,M) { double def_temp;\
00159 ((unsigned char*) &def_temp)[0]= ((unsigned char*) (M))[3];\
00160 ((unsigned char*) &def_temp)[1]= ((unsigned char*) (M))[2];\
00161 ((unsigned char*) &def_temp)[2]= ((unsigned char*) (M))[1];\
00162 ((unsigned char*) &def_temp)[3]= ((unsigned char*) (M))[0];\
00163 ((unsigned char*) &def_temp)[4]= ((unsigned char*) (M))[7];\
00164 ((unsigned char*) &def_temp)[5]= ((unsigned char*) (M))[6];\
00165 ((unsigned char*) &def_temp)[6]= ((unsigned char*) (M))[5];\
00166 ((unsigned char*) &def_temp)[7]= ((unsigned char*) (M))[4];\
00167 (V)= def_temp; }
00168
00169 #else
00170
00171 #define mi_float8get(V,M) { double def_temp;\
00172 ((unsigned char*) &def_temp)[0]= ((unsigned char*) (M))[7];\
00173 ((unsigned char*) &def_temp)[1]= ((unsigned char*) (M))[6];\
00174 ((unsigned char*) &def_temp)[2]= ((unsigned char*) (M))[5];\
00175 ((unsigned char*) &def_temp)[3]= ((unsigned char*) (M))[4];\
00176 ((unsigned char*) &def_temp)[4]= ((unsigned char*) (M))[3];\
00177 ((unsigned char*) &def_temp)[5]= ((unsigned char*) (M))[2];\
00178 ((unsigned char*) &def_temp)[6]= ((unsigned char*) (M))[1];\
00179 ((unsigned char*) &def_temp)[7]= ((unsigned char*) (M))[0];\
00180 (V)= def_temp; }
00181 #endif
00182 #endif
00183
00184
00185 #define mi_rowstore(T,A) mi_int8store(T, A)
00186 #define mi_rowkorr(T) mi_uint8korr(T)
00187
00188 #define mi_sizestore(T,A) mi_int8store(T, A)
00189 #define mi_sizekorr(T) mi_uint8korr(T)
00190