mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-27 14:34:58 +00:00
fix some type confusion in ReadVBR64: "Piece" should be only 32 bits,
not 64, because we read at most 32 bits at a time. OTOH, "Result" must be 64-bits and insertion into it must be 64-bit clean. Thanks to Ivan Sorokin for bringing this up. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@74932 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
a9d1f2c559
commit
f5a1edce23
@ -260,6 +260,7 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
uint32_t Read(unsigned NumBits) {
|
uint32_t Read(unsigned NumBits) {
|
||||||
|
assert(NumBits <= 32 && "Cannot return more than 32 bits!");
|
||||||
// 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) {
|
||||||
uint32_t R = CurWord & ((1U << NumBits)-1);
|
uint32_t R = CurWord & ((1U << NumBits)-1);
|
||||||
@ -322,17 +323,19 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ReadVBR64 - Read a VBR that may have a value up to 64-bits in size. The
|
||||||
|
// chunk size of the VBR must still be <= 32 bits though.
|
||||||
uint64_t ReadVBR64(unsigned NumBits) {
|
uint64_t ReadVBR64(unsigned NumBits) {
|
||||||
uint64_t Piece = Read(NumBits);
|
uint32_t Piece = Read(NumBits);
|
||||||
if ((Piece & (uint64_t(1) << (NumBits-1))) == 0)
|
if ((Piece & (1U << (NumBits-1))) == 0)
|
||||||
return Piece;
|
return uint64_t(Piece);
|
||||||
|
|
||||||
uint64_t Result = 0;
|
uint64_t Result = 0;
|
||||||
unsigned NextBit = 0;
|
unsigned NextBit = 0;
|
||||||
while (1) {
|
while (1) {
|
||||||
Result |= (Piece & ((1U << (NumBits-1))-1)) << NextBit;
|
Result |= uint64_t(Piece & ((1U << (NumBits-1))-1)) << NextBit;
|
||||||
|
|
||||||
if ((Piece & (uint64_t(1) << (NumBits-1))) == 0)
|
if ((Piece & (1U << (NumBits-1))) == 0)
|
||||||
return Result;
|
return Result;
|
||||||
|
|
||||||
NextBit += NumBits-1;
|
NextBit += NumBits-1;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user