mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-08 03:30:22 +00:00
Use a more canonical way of computing a mask with N trailing 1s. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@222137 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
18e5ce0188
commit
6e61dd242b
@ -338,16 +338,14 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
word_t Read(unsigned NumBits) {
|
word_t Read(unsigned NumBits) {
|
||||||
static const unsigned BitsInWord = sizeof(word_t) * 8;
|
assert(NumBits && NumBits <= sizeof(word_t) * 8 &&
|
||||||
|
|
||||||
assert(NumBits && NumBits <= BitsInWord &&
|
|
||||||
"Cannot return zero or more than BitsInWord bits!");
|
"Cannot return zero or more than BitsInWord bits!");
|
||||||
|
|
||||||
static const unsigned Mask = sizeof(word_t) > 4 ? 0x3f : 0x1f;
|
static const unsigned Mask = sizeof(word_t) > 4 ? 0x3f : 0x1f;
|
||||||
|
|
||||||
// If the field is fully contained by CurWord, return it quickly.
|
// If the field is fully contained by CurWord, return it quickly.
|
||||||
if (BitsInCurWord >= NumBits) {
|
if (BitsInCurWord >= NumBits) {
|
||||||
word_t R = CurWord & (~word_t(0) >> (BitsInWord - NumBits));
|
word_t R = CurWord & ((word_t(1) << NumBits) - 1);
|
||||||
|
|
||||||
// Use a mask to avoid undefined behavior.
|
// Use a mask to avoid undefined behavior.
|
||||||
CurWord >>= (NumBits & Mask);
|
CurWord >>= (NumBits & Mask);
|
||||||
@ -365,7 +363,7 @@ public:
|
|||||||
if (BitsLeft > BitsInCurWord)
|
if (BitsLeft > BitsInCurWord)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
word_t R2 = CurWord & (~word_t(0) >> (BitsInWord - BitsLeft));
|
word_t R2 = CurWord & ((word_t(1) << BitsLeft) - 1);
|
||||||
|
|
||||||
// Use a mask to avoid undefined behavior.
|
// Use a mask to avoid undefined behavior.
|
||||||
CurWord >>= (BitsLeft & Mask);
|
CurWord >>= (BitsLeft & Mask);
|
||||||
|
Loading…
Reference in New Issue
Block a user