Revision 603fccce target-alpha/op_helper.c

b/target-alpha/op_helper.c
19 19
 */
20 20

  
21 21
#include "exec.h"
22
#include "host-utils.h"
22 23
#include "softfloat.h"
23 24

  
24 25
#include "op_helper.h"
......
211 212

  
212 213
void helper_ctpop (void)
213 214
{
214
    int n;
215

  
216
    for (n = 0; T0 != 0; n++)
217
        T0 = T0 ^ (T0 - 1);
218
    T0 = n;
215
    T0 = ctpop64(T0);
219 216
}
220 217

  
221 218
void helper_ctlz (void)
222 219
{
223
    uint32_t op32;
224
    int n;
225

  
226
    n = 0;
227
    if (!(T0 & 0xFFFFFFFF00000000ULL)) {
228
        n += 32;
229
        T0 <<= 32;
230
    }
231
    /* Make it easier for 32 bits hosts */
232
    op32 = T0 >> 32;
233
    if (!(op32 & 0xFFFF0000UL)) {
234
        n += 16;
235
        op32 <<= 16;
236
    }
237
    if (!(op32 & 0xFF000000UL)) {
238
        n += 8;
239
        op32 <<= 8;
240
    }
241
    if (!(op32 & 0xF0000000UL)) {
242
        n += 4;
243
        op32 <<= 4;
244
    }
245
    if (!(op32 & 0xC0000000UL)) {
246
        n += 2;
247
        op32 <<= 2;
248
    }
249
    if (!(op32 & 0x80000000UL)) {
250
        n++;
251
        op32 <<= 1;
252
    }
253
    if (!(op32 & 0x80000000UL)) {
254
        n++;
255
    }
256
    T0 = n;
220
    T0 = clz64(T0);
257 221
}
258 222

  
259 223
void helper_cttz (void)
260 224
{
261
    uint32_t op32;
262
    int n;
263

  
264
    n = 0;
265
    if (!(T0 & 0x00000000FFFFFFFFULL)) {
266
        n += 32;
267
        T0 >>= 32;
268
    }
269
    /* Make it easier for 32 bits hosts */
270
    op32 = T0;
271
    if (!(op32 & 0x0000FFFFUL)) {
272
        n += 16;
273
        op32 >>= 16;
274
    }
275
    if (!(op32 & 0x000000FFUL)) {
276
        n += 8;
277
        op32 >>= 8;
278
    }
279
    if (!(op32 & 0x0000000FUL)) {
280
        n += 4;
281
        op32 >>= 4;
282
    }
283
    if (!(op32 & 0x00000003UL)) {
284
        n += 2;
285
        op32 >>= 2;
286
    }
287
    if (!(op32 & 0x00000001UL)) {
288
        n++;
289
        op32 >>= 1;
290
    }
291
    if (!(op32 & 0x00000001UL)) {
292
        n++;
293
    }
294
    T0 = n;
225
    T0 = ctz64(T0);
295 226
}
296 227

  
297 228
static always_inline uint64_t byte_zap (uint64_t op, uint8_t mskb)

Also available in: Unified diff