26
23
/* these two are for uniformity */
27
#define mi_sint1korr(A) ((int8_t)(*A))
24
#define mi_sint1korr(A) ((int8)(*A))
25
#define mi_uint1korr(A) ((uint8)(*A))
29
#define mi_sint2korr(A) ((int16_t) (((int16_t) (((const unsigned char*) (A))[1])) +\
30
((int16_t) ((int16_t) ((const char*) (A))[0]) << 8)))
31
#define mi_sint3korr(A) ((int32_t) (((((const unsigned char*) (A))[0]) & 128) ? \
32
(((uint32_t) 255L << 24) | \
33
(((uint32_t) ((const unsigned char*) (A))[0]) << 16) |\
34
(((uint32_t) ((const unsigned char*) (A))[1]) << 8) | \
35
((uint32_t) ((const unsigned char*) (A))[2])) : \
36
(((uint32_t) ((const unsigned char*) (A))[0]) << 16) |\
37
(((uint32_t) ((const unsigned char*) (A))[1]) << 8) | \
38
((uint32_t) ((const unsigned char*) (A))[2])))
39
#define mi_sint4korr(A) ((int32_t) (((int32_t) (((const unsigned char*) (A))[3])) +\
40
((int32_t) (((const unsigned char*) (A))[2]) << 8) +\
41
((int32_t) (((const unsigned char*) (A))[1]) << 16) +\
42
((int32_t) ((int16_t) ((const char*) (A))[0]) << 24)))
43
#define mi_sint8korr(A) ((int64_t) mi_uint8korr(A))
44
#define mi_uint2korr(A) ((uint16_t) (((uint16_t) (((const unsigned char*) (A))[1])) +\
45
((uint16_t) (((const unsigned char*) (A))[0]) << 8)))
46
#define mi_uint3korr(A) ((uint32_t) (((uint32_t) (((const unsigned char*) (A))[2])) +\
47
(((uint32_t) (((const unsigned char*) (A))[1])) << 8) +\
48
(((uint32_t) (((const unsigned char*) (A))[0])) << 16)))
49
#define mi_uint4korr(A) ((uint32_t) (((uint32_t) (((const unsigned char*) (A))[3])) +\
50
(((uint32_t) (((const unsigned char*) (A))[2])) << 8) +\
51
(((uint32_t) (((const unsigned char*) (A))[1])) << 16) +\
52
(((uint32_t) (((const unsigned char*) (A))[0])) << 24)))
53
#define mi_uint5korr(A) ((uint64_t)(((uint32_t) (((const unsigned char*) (A))[4])) +\
54
(((uint32_t) (((const unsigned char*) (A))[3])) << 8) +\
55
(((uint32_t) (((const unsigned char*) (A))[2])) << 16) +\
56
(((uint32_t) (((const unsigned char*) (A))[1])) << 24)) +\
57
(((uint64_t) (((const unsigned char*) (A))[0])) << 32))
58
#define mi_uint6korr(A) ((uint64_t)(((uint32_t) (((const unsigned char*) (A))[5])) +\
59
(((uint32_t) (((const unsigned char*) (A))[4])) << 8) +\
60
(((uint32_t) (((const unsigned char*) (A))[3])) << 16) +\
61
(((uint32_t) (((const unsigned char*) (A))[2])) << 24)) +\
62
(((uint64_t) (((uint32_t) (((const unsigned char*) (A))[1])) +\
63
(((uint32_t) (((const unsigned char*) (A))[0]) << 8)))) <<\
65
#define mi_uint7korr(A) ((uint64_t)(((uint32_t) (((const unsigned char*) (A))[6])) +\
66
(((uint32_t) (((const unsigned char*) (A))[5])) << 8) +\
67
(((uint32_t) (((const unsigned char*) (A))[4])) << 16) +\
68
(((uint32_t) (((const unsigned char*) (A))[3])) << 24)) +\
69
(((uint64_t) (((uint32_t) (((const unsigned char*) (A))[2])) +\
70
(((uint32_t) (((const unsigned char*) (A))[1])) << 8) +\
71
(((uint32_t) (((const unsigned char*) (A))[0])) << 16))) <<\
73
#define mi_uint8korr(A) ((uint64_t)(((uint32_t) (((const unsigned char*) (A))[7])) +\
74
(((uint32_t) (((const unsigned char*) (A))[6])) << 8) +\
75
(((uint32_t) (((const unsigned char*) (A))[5])) << 16) +\
76
(((uint32_t) (((const unsigned char*) (A))[4])) << 24)) +\
77
(((uint64_t) (((uint32_t) (((const unsigned char*) (A))[3])) +\
78
(((uint32_t) (((const unsigned char*) (A))[2])) << 8) +\
79
(((uint32_t) (((const unsigned char*) (A))[1])) << 16) +\
80
(((uint32_t) (((const unsigned char*) (A))[0])) << 24))) <<\
27
#define mi_sint2korr(A) ((int16) (((int16) (((uchar*) (A))[1])) +\
28
((int16) ((int16) ((char*) (A))[0]) << 8)))
29
#define mi_sint3korr(A) ((int32) (((((uchar*) (A))[0]) & 128) ? \
30
(((uint32) 255L << 24) | \
31
(((uint32) ((uchar*) (A))[0]) << 16) |\
32
(((uint32) ((uchar*) (A))[1]) << 8) | \
33
((uint32) ((uchar*) (A))[2])) : \
34
(((uint32) ((uchar*) (A))[0]) << 16) |\
35
(((uint32) ((uchar*) (A))[1]) << 8) | \
36
((uint32) ((uchar*) (A))[2])))
37
#define mi_sint4korr(A) ((int32) (((int32) (((uchar*) (A))[3])) +\
38
((int32) (((uchar*) (A))[2]) << 8) +\
39
((int32) (((uchar*) (A))[1]) << 16) +\
40
((int32) ((int16) ((char*) (A))[0]) << 24)))
41
#define mi_sint8korr(A) ((longlong) mi_uint8korr(A))
42
#define mi_uint2korr(A) ((uint16) (((uint16) (((uchar*) (A))[1])) +\
43
((uint16) (((uchar*) (A))[0]) << 8)))
44
#define mi_uint3korr(A) ((uint32) (((uint32) (((uchar*) (A))[2])) +\
45
(((uint32) (((uchar*) (A))[1])) << 8) +\
46
(((uint32) (((uchar*) (A))[0])) << 16)))
47
#define mi_uint4korr(A) ((uint32) (((uint32) (((uchar*) (A))[3])) +\
48
(((uint32) (((uchar*) (A))[2])) << 8) +\
49
(((uint32) (((uchar*) (A))[1])) << 16) +\
50
(((uint32) (((uchar*) (A))[0])) << 24)))
51
#define mi_uint5korr(A) ((ulonglong)(((uint32) (((uchar*) (A))[4])) +\
52
(((uint32) (((uchar*) (A))[3])) << 8) +\
53
(((uint32) (((uchar*) (A))[2])) << 16) +\
54
(((uint32) (((uchar*) (A))[1])) << 24)) +\
55
(((ulonglong) (((uchar*) (A))[0])) << 32))
56
#define mi_uint6korr(A) ((ulonglong)(((uint32) (((uchar*) (A))[5])) +\
57
(((uint32) (((uchar*) (A))[4])) << 8) +\
58
(((uint32) (((uchar*) (A))[3])) << 16) +\
59
(((uint32) (((uchar*) (A))[2])) << 24)) +\
60
(((ulonglong) (((uint32) (((uchar*) (A))[1])) +\
61
(((uint32) (((uchar*) (A))[0]) << 8)))) <<\
63
#define mi_uint7korr(A) ((ulonglong)(((uint32) (((uchar*) (A))[6])) +\
64
(((uint32) (((uchar*) (A))[5])) << 8) +\
65
(((uint32) (((uchar*) (A))[4])) << 16) +\
66
(((uint32) (((uchar*) (A))[3])) << 24)) +\
67
(((ulonglong) (((uint32) (((uchar*) (A))[2])) +\
68
(((uint32) (((uchar*) (A))[1])) << 8) +\
69
(((uint32) (((uchar*) (A))[0])) << 16))) <<\
71
#define mi_uint8korr(A) ((ulonglong)(((uint32) (((uchar*) (A))[7])) +\
72
(((uint32) (((uchar*) (A))[6])) << 8) +\
73
(((uint32) (((uchar*) (A))[5])) << 16) +\
74
(((uint32) (((uchar*) (A))[4])) << 24)) +\
75
(((ulonglong) (((uint32) (((uchar*) (A))[3])) +\
76
(((uint32) (((uchar*) (A))[2])) << 8) +\
77
(((uint32) (((uchar*) (A))[1])) << 16) +\
78
(((uint32) (((uchar*) (A))[0])) << 24))) <<\
83
81
/* This one is for uniformity */
84
#define mi_int1store(T,A) *((unsigned char*)(T))= (unsigned char) (A)
82
#define mi_int1store(T,A) *((uchar*)(T))= (uchar) (A)
86
#define mi_int2store(T,A) { uint32_t def_temp= (uint32_t) (A) ;\
87
((unsigned char*) (T))[1]= (unsigned char) (def_temp);\
88
((unsigned char*) (T))[0]= (unsigned char) (def_temp >> 8); }
84
#define mi_int2store(T,A) { uint def_temp= (uint) (A) ;\
85
((uchar*) (T))[1]= (uchar) (def_temp);\
86
((uchar*) (T))[0]= (uchar) (def_temp >> 8); }
89
87
#define mi_int3store(T,A) { /*lint -save -e734 */\
90
uint32_t def_temp= (uint32_t) (A);\
91
((unsigned char*) (T))[2]= (unsigned char) (def_temp);\
92
((unsigned char*) (T))[1]= (unsigned char) (def_temp >> 8);\
93
((unsigned char*) (T))[0]= (unsigned char) (def_temp >> 16);\
88
ulong def_temp= (ulong) (A);\
89
((uchar*) (T))[2]= (uchar) (def_temp);\
90
((uchar*) (T))[1]= (uchar) (def_temp >> 8);\
91
((uchar*) (T))[0]= (uchar) (def_temp >> 16);\
94
92
/*lint -restore */}
95
#define mi_int4store(T,A) { uint32_t def_temp= (uint32_t) (A);\
96
((unsigned char*) (T))[3]= (unsigned char) (def_temp);\
97
((unsigned char*) (T))[2]= (unsigned char) (def_temp >> 8);\
98
((unsigned char*) (T))[1]= (unsigned char) (def_temp >> 16);\
99
((unsigned char*) (T))[0]= (unsigned char) (def_temp >> 24); }
100
#define mi_int5store(T,A) { uint32_t def_temp= (uint32_t) (A),\
101
def_temp2= (uint32_t) ((A) >> 32);\
102
((unsigned char*) (T))[4]= (unsigned char) (def_temp);\
103
((unsigned char*) (T))[3]= (unsigned char) (def_temp >> 8);\
104
((unsigned char*) (T))[2]= (unsigned char) (def_temp >> 16);\
105
((unsigned char*) (T))[1]= (unsigned char) (def_temp >> 24);\
106
((unsigned char*) (T))[0]= (unsigned char) (def_temp2); }
107
#define mi_int6store(T,A) { uint32_t def_temp= (uint32_t) (A),\
108
def_temp2= (uint32_t) ((A) >> 32);\
109
((unsigned char*) (T))[5]= (unsigned char) (def_temp);\
110
((unsigned char*) (T))[4]= (unsigned char) (def_temp >> 8);\
111
((unsigned char*) (T))[3]= (unsigned char) (def_temp >> 16);\
112
((unsigned char*) (T))[2]= (unsigned char) (def_temp >> 24);\
113
((unsigned char*) (T))[1]= (unsigned char) (def_temp2);\
114
((unsigned char*) (T))[0]= (unsigned char) (def_temp2 >> 8); }
115
#define mi_int7store(T,A) { uint32_t def_temp= (uint32_t) (A),\
116
def_temp2= (uint32_t) ((A) >> 32);\
117
((unsigned char*) (T))[6]= (unsigned char) (def_temp);\
118
((unsigned char*) (T))[5]= (unsigned char) (def_temp >> 8);\
119
((unsigned char*) (T))[4]= (unsigned char) (def_temp >> 16);\
120
((unsigned char*) (T))[3]= (unsigned char) (def_temp >> 24);\
121
((unsigned char*) (T))[2]= (unsigned char) (def_temp2);\
122
((unsigned char*) (T))[1]= (unsigned char) (def_temp2 >> 8);\
123
((unsigned char*) (T))[0]= (unsigned char) (def_temp2 >> 16); }
124
#define mi_int8store(T,A) { uint32_t def_temp3= (uint32_t) (A),\
125
def_temp4= (uint32_t) ((A) >> 32);\
126
mi_int4store((unsigned char*) (T) + 0, def_temp4);\
127
mi_int4store((unsigned char*) (T) + 4, def_temp3); }
93
#define mi_int4store(T,A) { ulong def_temp= (ulong) (A);\
94
((uchar*) (T))[3]= (uchar) (def_temp);\
95
((uchar*) (T))[2]= (uchar) (def_temp >> 8);\
96
((uchar*) (T))[1]= (uchar) (def_temp >> 16);\
97
((uchar*) (T))[0]= (uchar) (def_temp >> 24); }
98
#define mi_int5store(T,A) { ulong def_temp= (ulong) (A),\
99
def_temp2= (ulong) ((A) >> 32);\
100
((uchar*) (T))[4]= (uchar) (def_temp);\
101
((uchar*) (T))[3]= (uchar) (def_temp >> 8);\
102
((uchar*) (T))[2]= (uchar) (def_temp >> 16);\
103
((uchar*) (T))[1]= (uchar) (def_temp >> 24);\
104
((uchar*) (T))[0]= (uchar) (def_temp2); }
105
#define mi_int6store(T,A) { ulong def_temp= (ulong) (A),\
106
def_temp2= (ulong) ((A) >> 32);\
107
((uchar*) (T))[5]= (uchar) (def_temp);\
108
((uchar*) (T))[4]= (uchar) (def_temp >> 8);\
109
((uchar*) (T))[3]= (uchar) (def_temp >> 16);\
110
((uchar*) (T))[2]= (uchar) (def_temp >> 24);\
111
((uchar*) (T))[1]= (uchar) (def_temp2);\
112
((uchar*) (T))[0]= (uchar) (def_temp2 >> 8); }
113
#define mi_int7store(T,A) { ulong def_temp= (ulong) (A),\
114
def_temp2= (ulong) ((A) >> 32);\
115
((uchar*) (T))[6]= (uchar) (def_temp);\
116
((uchar*) (T))[5]= (uchar) (def_temp >> 8);\
117
((uchar*) (T))[4]= (uchar) (def_temp >> 16);\
118
((uchar*) (T))[3]= (uchar) (def_temp >> 24);\
119
((uchar*) (T))[2]= (uchar) (def_temp2);\
120
((uchar*) (T))[1]= (uchar) (def_temp2 >> 8);\
121
((uchar*) (T))[0]= (uchar) (def_temp2 >> 16); }
122
#define mi_int8store(T,A) { ulong def_temp3= (ulong) (A),\
123
def_temp4= (ulong) ((A) >> 32);\
124
mi_int4store((uchar*) (T) + 0, def_temp4);\
125
mi_int4store((uchar*) (T) + 4, def_temp3); }
129
127
#ifdef WORDS_BIGENDIAN
129
#define mi_float4store(T,A) { ((uchar*) (T))[0]= ((uchar*) &A)[0];\
130
((uchar*) (T))[1]= ((uchar*) &A)[1];\
131
((uchar*) (T))[2]= ((uchar*) &A)[2];\
132
((uchar*) (T))[3]= ((uchar*) &A)[3]; }
131
134
#define mi_float4get(V,M) { float def_temp;\
132
((unsigned char*) &def_temp)[0]= ((const unsigned char*) (M))[0];\
133
((unsigned char*) &def_temp)[1]= ((const unsigned char*) (M))[1];\
134
((unsigned char*) &def_temp)[2]= ((const unsigned char*) (M))[2];\
135
((unsigned char*) &def_temp)[3]= ((const unsigned char*) (M))[3];\
135
((uchar*) &def_temp)[0]= ((uchar*) (M))[0];\
136
((uchar*) &def_temp)[1]= ((uchar*) (M))[1];\
137
((uchar*) &def_temp)[2]= ((uchar*) (M))[2];\
138
((uchar*) &def_temp)[3]= ((uchar*) (M))[3];\
141
#define mi_float8store(T,V) { ((uchar*) (T))[0]= ((uchar*) &V)[0];\
142
((uchar*) (T))[1]= ((uchar*) &V)[1];\
143
((uchar*) (T))[2]= ((uchar*) &V)[2];\
144
((uchar*) (T))[3]= ((uchar*) &V)[3];\
145
((uchar*) (T))[4]= ((uchar*) &V)[4];\
146
((uchar*) (T))[5]= ((uchar*) &V)[5];\
147
((uchar*) (T))[6]= ((uchar*) &V)[6];\
148
((uchar*) (T))[7]= ((uchar*) &V)[7]; }
138
150
#define mi_float8get(V,M) { double def_temp;\
139
((unsigned char*) &def_temp)[0]= ((unsigned char*) (M))[0];\
140
((unsigned char*) &def_temp)[1]= ((unsigned char*) (M))[1];\
141
((unsigned char*) &def_temp)[2]= ((unsigned char*) (M))[2];\
142
((unsigned char*) &def_temp)[3]= ((unsigned char*) (M))[3];\
143
((unsigned char*) &def_temp)[4]= ((unsigned char*) (M))[4];\
144
((unsigned char*) &def_temp)[5]= ((unsigned char*) (M))[5];\
145
((unsigned char*) &def_temp)[6]= ((unsigned char*) (M))[6];\
146
((unsigned char*) &def_temp)[7]= ((unsigned char*) (M))[7]; \
151
((uchar*) &def_temp)[0]= ((uchar*) (M))[0];\
152
((uchar*) &def_temp)[1]= ((uchar*) (M))[1];\
153
((uchar*) &def_temp)[2]= ((uchar*) (M))[2];\
154
((uchar*) &def_temp)[3]= ((uchar*) (M))[3];\
155
((uchar*) &def_temp)[4]= ((uchar*) (M))[4];\
156
((uchar*) &def_temp)[5]= ((uchar*) (M))[5];\
157
((uchar*) &def_temp)[6]= ((uchar*) (M))[6];\
158
((uchar*) &def_temp)[7]= ((uchar*) (M))[7]; \
162
#define mi_float4store(T,A) { ((uchar*) (T))[0]= ((uchar*) &A)[3];\
163
((uchar*) (T))[1]= ((uchar*) &A)[2];\
164
((uchar*) (T))[2]= ((uchar*) &A)[1];\
165
((uchar*) (T))[3]= ((uchar*) &A)[0]; }
150
167
#define mi_float4get(V,M) { float def_temp;\
151
((unsigned char*) &def_temp)[0]= ((unsigned char*) (M))[3];\
152
((unsigned char*) &def_temp)[1]= ((unsigned char*) (M))[2];\
153
((unsigned char*) &def_temp)[2]= ((unsigned char*) (M))[1];\
154
((unsigned char*) &def_temp)[3]= ((unsigned char*) (M))[0];\
168
((uchar*) &def_temp)[0]= ((uchar*) (M))[3];\
169
((uchar*) &def_temp)[1]= ((uchar*) (M))[2];\
170
((uchar*) &def_temp)[2]= ((uchar*) (M))[1];\
171
((uchar*) &def_temp)[3]= ((uchar*) (M))[0];\
157
174
#if defined(__FLOAT_WORD_ORDER) && (__FLOAT_WORD_ORDER == __BIG_ENDIAN)
175
#define mi_float8store(T,V) { ((uchar*) (T))[0]= ((uchar*) &V)[3];\
176
((uchar*) (T))[1]= ((uchar*) &V)[2];\
177
((uchar*) (T))[2]= ((uchar*) &V)[1];\
178
((uchar*) (T))[3]= ((uchar*) &V)[0];\
179
((uchar*) (T))[4]= ((uchar*) &V)[7];\
180
((uchar*) (T))[5]= ((uchar*) &V)[6];\
181
((uchar*) (T))[6]= ((uchar*) &V)[5];\
182
((uchar*) (T))[7]= ((uchar*) &V)[4];}
159
184
#define mi_float8get(V,M) { double def_temp;\
160
((unsigned char*) &def_temp)[0]= ((unsigned char*) (M))[3];\
161
((unsigned char*) &def_temp)[1]= ((unsigned char*) (M))[2];\
162
((unsigned char*) &def_temp)[2]= ((unsigned char*) (M))[1];\
163
((unsigned char*) &def_temp)[3]= ((unsigned char*) (M))[0];\
164
((unsigned char*) &def_temp)[4]= ((unsigned char*) (M))[7];\
165
((unsigned char*) &def_temp)[5]= ((unsigned char*) (M))[6];\
166
((unsigned char*) &def_temp)[6]= ((unsigned char*) (M))[5];\
167
((unsigned char*) &def_temp)[7]= ((unsigned char*) (M))[4];\
185
((uchar*) &def_temp)[0]= ((uchar*) (M))[3];\
186
((uchar*) &def_temp)[1]= ((uchar*) (M))[2];\
187
((uchar*) &def_temp)[2]= ((uchar*) (M))[1];\
188
((uchar*) &def_temp)[3]= ((uchar*) (M))[0];\
189
((uchar*) &def_temp)[4]= ((uchar*) (M))[7];\
190
((uchar*) &def_temp)[5]= ((uchar*) (M))[6];\
191
((uchar*) &def_temp)[6]= ((uchar*) (M))[5];\
192
((uchar*) &def_temp)[7]= ((uchar*) (M))[4];\
196
#define mi_float8store(T,V) { ((uchar*) (T))[0]= ((uchar*) &V)[7];\
197
((uchar*) (T))[1]= ((uchar*) &V)[6];\
198
((uchar*) (T))[2]= ((uchar*) &V)[5];\
199
((uchar*) (T))[3]= ((uchar*) &V)[4];\
200
((uchar*) (T))[4]= ((uchar*) &V)[3];\
201
((uchar*) (T))[5]= ((uchar*) &V)[2];\
202
((uchar*) (T))[6]= ((uchar*) &V)[1];\
203
((uchar*) (T))[7]= ((uchar*) &V)[0];}
172
205
#define mi_float8get(V,M) { double def_temp;\
173
((unsigned char*) &def_temp)[0]= ((unsigned char*) (M))[7];\
174
((unsigned char*) &def_temp)[1]= ((unsigned char*) (M))[6];\
175
((unsigned char*) &def_temp)[2]= ((unsigned char*) (M))[5];\
176
((unsigned char*) &def_temp)[3]= ((unsigned char*) (M))[4];\
177
((unsigned char*) &def_temp)[4]= ((unsigned char*) (M))[3];\
178
((unsigned char*) &def_temp)[5]= ((unsigned char*) (M))[2];\
179
((unsigned char*) &def_temp)[6]= ((unsigned char*) (M))[1];\
180
((unsigned char*) &def_temp)[7]= ((unsigned char*) (M))[0];\
206
((uchar*) &def_temp)[0]= ((uchar*) (M))[7];\
207
((uchar*) &def_temp)[1]= ((uchar*) (M))[6];\
208
((uchar*) &def_temp)[2]= ((uchar*) (M))[5];\
209
((uchar*) &def_temp)[3]= ((uchar*) (M))[4];\
210
((uchar*) &def_temp)[4]= ((uchar*) (M))[3];\
211
((uchar*) &def_temp)[5]= ((uchar*) (M))[2];\
212
((uchar*) &def_temp)[6]= ((uchar*) (M))[1];\
213
((uchar*) &def_temp)[7]= ((uchar*) (M))[0];\
182
215
#endif /* __FLOAT_WORD_ORDER */
183
216
#endif /* WORDS_BIGENDIAN */
185
218
/* Fix to avoid warnings when sizeof(ha_rows) == sizeof(long) */
186
221
#define mi_rowstore(T,A) mi_int8store(T, A)
187
222
#define mi_rowkorr(T) mi_uint8korr(T)
224
#define mi_rowstore(T,A) { mi_int4store(T, 0);\
225
mi_int4store(((uchar*) (T) + 4), A); }
226
#define mi_rowkorr(T) mi_uint4korr((uchar*) (T) + 4)
189
230
#define mi_sizestore(T,A) mi_int8store(T, A)
190
231
#define mi_sizekorr(T) mi_uint8korr(T)
192
#endif /* PLUGIN_MYISAM_MYISAMPACK_H */
233
#define mi_sizestore(T,A) { if ((A) == HA_OFFSET_ERROR)\
234
bfill((char*) (T), 8, 255);\
235
else { mi_int4store((T), 0);\
236
mi_int4store(((T) + 4), A); }}
237
#define mi_sizekorr(T) mi_uint4korr((uchar*) (T) + 4)