Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(36)

Unified Diff: include/llvm/Bitcode/NaCl/NaClBitstreamReader.h

Issue 14813032: Make abbreviations explicit in pnacl-freeze/thaw. (Closed) Base URL: http://git.chromium.org/native_client/pnacl-llvm.git@master
Patch Set: Fix typos in CL Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: include/llvm/Bitcode/NaCl/NaClBitstreamReader.h
diff --git a/include/llvm/Bitcode/NaCl/NaClBitstreamReader.h b/include/llvm/Bitcode/NaCl/NaClBitstreamReader.h
index 58c0a5d7fa355db91828922fbf45fccab9afcfcd..b75c42f4199ce16331b42702bcda491bf75e2eaf 100644
--- a/include/llvm/Bitcode/NaCl/NaClBitstreamReader.h
+++ b/include/llvm/Bitcode/NaCl/NaClBitstreamReader.h
@@ -186,20 +186,26 @@ class NaClBitstreamCursor {
// CurCodeSize - This is the declared size of code values used for the current
// block, in bits.
- unsigned CurCodeSize;
+ int32_t CurCodeSize;
Karl 2013/05/17 20:52:18 Changed to be an instance of NaClBitcodeSelectorAb
/// CurAbbrevs - Abbrevs installed at in this block.
std::vector<NaClBitCodeAbbrev*> CurAbbrevs;
struct Block {
- unsigned PrevCodeSize;
+ int32_t PrevCodeSize;
Karl 2013/05/17 20:52:18 Changed to be an instance of NaClBitcodeSelectorAb
std::vector<NaClBitCodeAbbrev*> PrevAbbrevs;
- explicit Block(unsigned PCS) : PrevCodeSize(PCS) {}
+ explicit Block(int32_t PCS) : PrevCodeSize(PCS) {}
};
/// BlockScope - This tracks the codesize of parent blocks.
SmallVector<Block, 8> BlockScope;
+ /// SignedValue - Convert unsigned to corresponding signed value,
+ /// based on the value of IsNegative.
+ int32_t SignedValue(uint32_t Val, bool IsNegative) {
Karl 2013/05/17 20:52:18 Removed, no longer used.
+ int32_t Value = static_cast<int32_t>(Val);
+ return IsNegative ? -Value : Value;
+ }
public:
NaClBitstreamCursor() : BitStream(0), NextChar(0) {
@@ -442,6 +448,28 @@ public:
}
}
+ int32_t ReadIntVBR(unsigned NumBits) {
jvoung (off chromium) 2013/05/14 23:47:14 Can we just use BitcodeReader::decodeSignRotatedVa
Karl 2013/05/17 20:52:18 Removed. Use NaClDecodeSignRotatedValue.
+ // Read extra bit for sign bit, and extract.
+ uint32_t Piece = Read(NumBits+1);
+ bool IsNegative = (Piece & (1U << NumBits)) == (1U << NumBits);
+ Piece &= (1U << (NumBits-1))-1;
+
+ if ((Piece & (1U << (NumBits-1))) == 0)
+ return SignedValue(Piece, IsNegative);
+
+ uint32_t Result = 0;
+ unsigned NextBit = 0;
+ while (1) {
+ Result |= (Piece & ((1U << (NumBits-1))-1)) << NextBit;
+
+ if ((Piece & (1U << (NumBits-1))) == 0)
+ return SignedValue(Result, IsNegative);
+
+ NextBit += NumBits-1;
+ Piece = Read(NumBits);
+ }
+ }
+
private:
void SkipToFourByteBoundary() {
// If word_t is 64-bits and if we've read less than 32 bits, just dump
@@ -459,7 +487,7 @@ private:
public:
unsigned ReadCode() {
- return Read(CurCodeSize);
+ return (CurCodeSize < 0) ? ReadVBR(-CurCodeSize) : Read(CurCodeSize);
Karl 2013/05/17 20:52:18 Changed to: return CurCodeSize.IsFixed ? Read(Cu
}

Powered by Google App Engine
This is Rietveld 408576698