Revision eaabeef2 target-ppc/op_helper.c
b/target-ppc/op_helper.c | ||
---|---|---|
499 | 499 |
} |
500 | 500 |
#endif |
501 | 501 |
|
502 |
#if defined(TARGET_PPC64) |
|
503 |
target_ulong helper_popcntb (target_ulong val) |
|
504 |
{ |
|
505 |
val = (val & 0x5555555555555555ULL) + ((val >> 1) & |
|
506 |
0x5555555555555555ULL); |
|
507 |
val = (val & 0x3333333333333333ULL) + ((val >> 2) & |
|
508 |
0x3333333333333333ULL); |
|
509 |
val = (val & 0x0f0f0f0f0f0f0f0fULL) + ((val >> 4) & |
|
510 |
0x0f0f0f0f0f0f0f0fULL); |
|
511 |
return val; |
|
512 |
} |
|
513 |
|
|
514 |
target_ulong helper_popcntw (target_ulong val) |
|
515 |
{ |
|
516 |
val = (val & 0x5555555555555555ULL) + ((val >> 1) & |
|
517 |
0x5555555555555555ULL); |
|
518 |
val = (val & 0x3333333333333333ULL) + ((val >> 2) & |
|
519 |
0x3333333333333333ULL); |
|
520 |
val = (val & 0x0f0f0f0f0f0f0f0fULL) + ((val >> 4) & |
|
521 |
0x0f0f0f0f0f0f0f0fULL); |
|
522 |
val = (val & 0x00ff00ff00ff00ffULL) + ((val >> 8) & |
|
523 |
0x00ff00ff00ff00ffULL); |
|
524 |
val = (val & 0x0000ffff0000ffffULL) + ((val >> 16) & |
|
525 |
0x0000ffff0000ffffULL); |
|
526 |
return val; |
|
527 |
} |
|
528 |
|
|
529 |
target_ulong helper_popcntd (target_ulong val) |
|
530 |
{ |
|
531 |
val = (val & 0x5555555555555555ULL) + ((val >> 1) & |
|
532 |
0x5555555555555555ULL); |
|
533 |
val = (val & 0x3333333333333333ULL) + ((val >> 2) & |
|
534 |
0x3333333333333333ULL); |
|
535 |
val = (val & 0x0f0f0f0f0f0f0f0fULL) + ((val >> 4) & |
|
536 |
0x0f0f0f0f0f0f0f0fULL); |
|
537 |
val = (val & 0x00ff00ff00ff00ffULL) + ((val >> 8) & |
|
538 |
0x00ff00ff00ff00ffULL); |
|
539 |
val = (val & 0x0000ffff0000ffffULL) + ((val >> 16) & |
|
540 |
0x0000ffff0000ffffULL); |
|
541 |
val = (val & 0x00000000ffffffffULL) + ((val >> 32) & |
|
542 |
0x00000000ffffffffULL); |
|
543 |
return val; |
|
544 |
} |
|
545 |
#else |
|
502 | 546 |
target_ulong helper_popcntb (target_ulong val) |
503 | 547 |
{ |
504 | 548 |
val = (val & 0x55555555) + ((val >> 1) & 0x55555555); |
... | ... | |
507 | 551 |
return val; |
508 | 552 |
} |
509 | 553 |
|
510 |
#if defined(TARGET_PPC64) |
|
511 |
target_ulong helper_popcntb_64 (target_ulong val) |
|
554 |
target_ulong helper_popcntw (target_ulong val) |
|
512 | 555 |
{ |
513 |
val = (val & 0x5555555555555555ULL) + ((val >> 1) & 0x5555555555555555ULL); |
|
514 |
val = (val & 0x3333333333333333ULL) + ((val >> 2) & 0x3333333333333333ULL); |
|
515 |
val = (val & 0x0f0f0f0f0f0f0f0fULL) + ((val >> 4) & 0x0f0f0f0f0f0f0f0fULL); |
|
556 |
val = (val & 0x55555555) + ((val >> 1) & 0x55555555); |
|
557 |
val = (val & 0x33333333) + ((val >> 2) & 0x33333333); |
|
558 |
val = (val & 0x0f0f0f0f) + ((val >> 4) & 0x0f0f0f0f); |
|
559 |
val = (val & 0x00ff00ff) + ((val >> 8) & 0x00ff00ff); |
|
560 |
val = (val & 0x0000ffff) + ((val >> 16) & 0x0000ffff); |
|
516 | 561 |
return val; |
517 | 562 |
} |
518 | 563 |
#endif |
Also available in: Unified diff