equal
deleted
inserted
replaced
1739 the high bits are ignored and clear in the result |
1739 the high bits are ignored and clear in the result |
1740 i.e. xxx.a.b.c.d....x.y.z -> 000.z.y.x...b.a.d.c." |
1740 i.e. xxx.a.b.c.d....x.y.z -> 000.z.y.x...b.a.d.c." |
1741 |
1741 |
1742 %{ /* NOCONTEXT */ |
1742 %{ /* NOCONTEXT */ |
1743 #ifndef __SCHTEAM__ |
1743 #ifndef __SCHTEAM__ |
1744 __uint64__ v = __intVal(self); |
1744 unsigned INT v = __intVal(self); |
1745 |
1745 # if __POINTER_SIZE__ == 8 |
1746 // swap odd and even bits |
1746 // swap odd and even bits |
1747 v = ((v >> 1) & 0x5555555555555555ULL) | ((v & 0x5555555555555555ULL) << 1); |
1747 v = ((v >> 1) & 0x5555555555555555ULL) | ((v & 0x5555555555555555ULL) << 1); |
1748 // swap consecutive pairs |
1748 // swap consecutive pairs |
1749 v = ((v >> 2) & 0x3333333333333333ULL) | ((v & 0x3333333333333333ULL) << 2); |
1749 v = ((v >> 2) & 0x3333333333333333ULL) | ((v & 0x3333333333333333ULL) << 2); |
1750 // swap nibbles ... |
1750 // swap nibbles ... |
1754 // swap 16bit words |
1754 // swap 16bit words |
1755 v = ((v >> 16) & 0x0000FFFF0000FFFFULL) | ((v & 0x0000FFFF0000FFFFULL) << 16); |
1755 v = ((v >> 16) & 0x0000FFFF0000FFFFULL) | ((v & 0x0000FFFF0000FFFFULL) << 16); |
1756 // swap 32bit words |
1756 // swap 32bit words |
1757 v = ((v >> 32) & 0x00000000FFFFFFFFULL) | ((v & 0x00000000FFFFFFFFULL) << 32); |
1757 v = ((v >> 32) & 0x00000000FFFFFFFFULL) | ((v & 0x00000000FFFFFFFFULL) << 32); |
1758 |
1758 |
1759 # if __POINTER_SIZE__ == 8 |
|
1760 if (v <= _MAX_INT) { |
1759 if (v <= _MAX_INT) { |
1761 RETURN ( __mkSmallInteger(v) ); |
1760 RETURN ( __mkSmallInteger(v) ); |
1762 } |
1761 } |
1763 RETURN (__MKUINT(v)); |
1762 RETURN (__MKUINT(v)); |
1764 # else |
1763 # else |
1765 RETURN (__MKLARGEINT64(1, (INT)(v >> 32), (INT)(v & 0xFFFFFFFF))); |
1764 // swap odd and even bits |
|
1765 v = ((v >> 1) & 0x55555555UL) | ((v & 0x55555555UL) << 1); |
|
1766 // swap consecutive pairs |
|
1767 v = ((v >> 2) & 0x33333333UL) | ((v & 0x33333333UL) << 2); |
|
1768 // swap nibbles ... |
|
1769 v = ((v >> 4) & 0x0F0F0F0FUL) | ((v & 0x0F0F0F0FUL) << 4); |
|
1770 // swap bytes |
|
1771 v = ((v >> 8) & 0x00FF00FFUL) | ((v & 0x00FF00FFUL) << 8); |
|
1772 // swap 16bit words |
|
1773 v = ((v >> 16) & 0x0000FFFFUL) | ((v & 0x0000FFFFUL) << 16); |
|
1774 // swap 32bit words |
|
1775 |
|
1776 RETURN (__MKLARGEINT64(1, (INT)v, (INT)0)); |
1766 # endif |
1777 # endif |
1767 #endif /* not __SCHTEAM__ */ |
1778 #endif /* not __SCHTEAM__ */ |
1768 %}. |
1779 %}. |
1769 ^ super bitReversed64 |
1780 ^ super bitReversed64 |
1770 |
1781 |