mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-31 09:25:42 +00:00
finish implementation of basic abbrev writing.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36364 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -194,11 +194,40 @@ public:
|
|||||||
unsigned AbbrevNo = Abbrev-bitc::FIRST_ABBREV;
|
unsigned AbbrevNo = Abbrev-bitc::FIRST_ABBREV;
|
||||||
assert(AbbrevNo < CurAbbrevs.size() && "Invalid abbrev #!");
|
assert(AbbrevNo < CurAbbrevs.size() && "Invalid abbrev #!");
|
||||||
BitCodeAbbrev *Abbv = CurAbbrevs[AbbrevNo];
|
BitCodeAbbrev *Abbv = CurAbbrevs[AbbrevNo];
|
||||||
assert(0 && "TODO");
|
|
||||||
|
EmitCode(Abbrev);
|
||||||
|
|
||||||
|
// Insert the code into Vals to treat it uniformly.
|
||||||
|
Vals.insert(Vals.begin(), Code);
|
||||||
|
|
||||||
|
unsigned RecordIdx = 0;
|
||||||
for (unsigned i = 0, e = Abbv->getNumOperandInfos(); i != e; ++i) {
|
for (unsigned i = 0, e = Abbv->getNumOperandInfos(); i != e; ++i) {
|
||||||
|
assert(RecordIdx < Vals.size() && "Invalid abbrev/record");
|
||||||
|
const BitCodeAbbrevOp &Op = Abbv->getOperandInfo(i);
|
||||||
|
uint64_t RecordVal = Vals[RecordIdx];
|
||||||
|
|
||||||
|
if (Op.isLiteral()) {
|
||||||
|
// If the abbrev specifies the literal value to use, don't emit
|
||||||
|
// anything.
|
||||||
|
assert(RecordVal == Op.getLiteralValue() &&
|
||||||
|
"Invalid abbrev for record!");
|
||||||
|
++RecordIdx;
|
||||||
|
} else {
|
||||||
|
// Encode the value as we are commanded.
|
||||||
|
switch (Op.getEncoding()) {
|
||||||
|
default: assert(0 && "Unknown encoding!");
|
||||||
|
case BitCodeAbbrevOp::FixedWidth:
|
||||||
|
Emit64(RecordVal, Op.getEncodingData());
|
||||||
|
++RecordIdx;
|
||||||
|
break;
|
||||||
|
case BitCodeAbbrevOp::VBR:
|
||||||
|
EmitVBR64(RecordVal, Op.getEncodingData());
|
||||||
|
++RecordIdx;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
assert(RecordIdx == Vals.size() && "Not all record operands emitted!");
|
||||||
} else {
|
} else {
|
||||||
// If we don't have an abbrev to use, emit this in its fully unabbreviated
|
// If we don't have an abbrev to use, emit this in its fully unabbreviated
|
||||||
// form.
|
// form.
|
||||||
@@ -215,7 +244,43 @@ public:
|
|||||||
void EmitRecord(unsigned Code, SmallVectorImpl<unsigned> &Vals,
|
void EmitRecord(unsigned Code, SmallVectorImpl<unsigned> &Vals,
|
||||||
unsigned Abbrev = 0) {
|
unsigned Abbrev = 0) {
|
||||||
if (Abbrev) {
|
if (Abbrev) {
|
||||||
assert(0 && "abbrevs not implemented yet!");
|
unsigned AbbrevNo = Abbrev-bitc::FIRST_ABBREV;
|
||||||
|
assert(AbbrevNo < CurAbbrevs.size() && "Invalid abbrev #!");
|
||||||
|
BitCodeAbbrev *Abbv = CurAbbrevs[AbbrevNo];
|
||||||
|
|
||||||
|
EmitCode(Abbrev);
|
||||||
|
|
||||||
|
// Insert the code into Vals to treat it uniformly.
|
||||||
|
Vals.insert(Vals.begin(), Code);
|
||||||
|
|
||||||
|
unsigned RecordIdx = 0;
|
||||||
|
for (unsigned i = 0, e = Abbv->getNumOperandInfos(); i != e; ++i) {
|
||||||
|
assert(RecordIdx < Vals.size() && "Invalid abbrev/record");
|
||||||
|
const BitCodeAbbrevOp &Op = Abbv->getOperandInfo(i);
|
||||||
|
unsigned RecordVal = Vals[RecordIdx];
|
||||||
|
|
||||||
|
if (Op.isLiteral()) {
|
||||||
|
// If the abbrev specifies the literal value to use, don't emit
|
||||||
|
// anything.
|
||||||
|
assert(RecordVal == Op.getLiteralValue() &&
|
||||||
|
"Invalid abbrev for record!");
|
||||||
|
++RecordIdx;
|
||||||
|
} else {
|
||||||
|
// Encode the value as we are commanded.
|
||||||
|
switch (Op.getEncoding()) {
|
||||||
|
default: assert(0 && "Unknown encoding!");
|
||||||
|
case BitCodeAbbrevOp::FixedWidth:
|
||||||
|
Emit(RecordVal, Op.getEncodingData());
|
||||||
|
++RecordIdx;
|
||||||
|
break;
|
||||||
|
case BitCodeAbbrevOp::VBR:
|
||||||
|
EmitVBR(RecordVal, Op.getEncodingData());
|
||||||
|
++RecordIdx;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
assert(RecordIdx == Vals.size() && "Not all record operands emitted!");
|
||||||
} else {
|
} else {
|
||||||
// If we don't have an abbrev to use, emit this in its fully unabbreviated
|
// If we don't have an abbrev to use, emit this in its fully unabbreviated
|
||||||
// form.
|
// form.
|
||||||
|
Reference in New Issue
Block a user