forked from OSchip/llvm-project
Extract a slightly more general BitVector printer.
This one can also print 32-bit groups. llvm-svn: 140897
This commit is contained in:
parent
1352be2bd3
commit
8153f6c39f
|
@ -205,6 +205,21 @@ RegisterInfoEmitter::EmitRegMapping(raw_ostream &OS,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Print a BitVector as a sequence of hex numbers using a little-endian mapping.
|
||||||
|
// Width is the number of bits per hex number.
|
||||||
|
static void printBitVectorAsHex(raw_ostream &OS,
|
||||||
|
const BitVector &Bits,
|
||||||
|
unsigned Width) {
|
||||||
|
assert(Width <= 32 && "Width too large");
|
||||||
|
unsigned Digits = (Width + 3) / 4;
|
||||||
|
for (unsigned i = 0, e = Bits.size(); i < e; i += Width) {
|
||||||
|
unsigned Value = 0;
|
||||||
|
for (unsigned j = 0; j != Width && i + j != e; ++j)
|
||||||
|
Value |= Bits.test(i + j) << j;
|
||||||
|
OS << format("0x%0*x, ", Digits, Value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Helper to emit a set of bits into a constant byte array.
|
// Helper to emit a set of bits into a constant byte array.
|
||||||
class BitVectorEmitter {
|
class BitVectorEmitter {
|
||||||
BitVector Values;
|
BitVector Values;
|
||||||
|
@ -216,13 +231,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
void print(raw_ostream &OS) {
|
void print(raw_ostream &OS) {
|
||||||
for (unsigned i = 0, e = Values.size() / 8; i != e; ++i) {
|
printBitVectorAsHex(OS, Values, 8);
|
||||||
unsigned char out = 0;
|
|
||||||
for (unsigned j = 0; j != 8; ++j)
|
|
||||||
if (Values[i * 8 + j])
|
|
||||||
out |= 1 << j;
|
|
||||||
OS << format("0x%02x, ", out);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue