Steal bits from the asm string index to use for operand information. On both

x86 and ppc, this gets us 4 more bits to play with, since the string indices
both only use 12 bits.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29180 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2006-07-18 17:38:46 +00:00
parent 5561640043
commit b51ecd4dd9

View File

@ -457,8 +457,7 @@ void AsmWriterEmitter::run(std::ostream &O) {
// To reduce code size, we compactify common instructions into a few bits // To reduce code size, we compactify common instructions into a few bits
// in the opcode-indexed table. // in the opcode-indexed table.
// 16 bits to play with. unsigned BitsLeft = 32-AsmStrBits;
unsigned BitsLeft = 16;
std::vector<std::vector<std::string> > TableDrivenOperandPrinters; std::vector<std::vector<std::string> > TableDrivenOperandPrinters;
@ -501,7 +500,7 @@ void AsmWriterEmitter::run(std::ostream &O) {
O<<" static const unsigned OpInfo[] = {\n"; O<<" static const unsigned OpInfo[] = {\n";
for (unsigned i = 0, e = NumberedInstructions.size(); i != e; ++i) { for (unsigned i = 0, e = NumberedInstructions.size(); i != e; ++i) {
O << " " << OpcodeInfo[i] << ",\t// " O << " " << OpcodeInfo[i] << "U,\t// "
<< NumberedInstructions[i]->TheDef->getName() << "\n"; << NumberedInstructions[i]->TheDef->getName() << "\n";
} }
// Add a dummy entry so the array init doesn't end with a comma. // Add a dummy entry so the array init doesn't end with a comma.
@ -548,7 +547,7 @@ void AsmWriterEmitter::run(std::ostream &O) {
<< " O << AsmStrs+(Bits & " << (1 << AsmStrBits)-1 << ");\n\n"; << " O << AsmStrs+(Bits & " << (1 << AsmStrBits)-1 << ");\n\n";
// Output the table driven operand information. // Output the table driven operand information.
BitsLeft = 16; BitsLeft = 32-AsmStrBits;
for (unsigned i = 0, e = TableDrivenOperandPrinters.size(); i != e; ++i) { for (unsigned i = 0, e = TableDrivenOperandPrinters.size(); i != e; ++i) {
std::vector<std::string> &Commands = TableDrivenOperandPrinters[i]; std::vector<std::string> &Commands = TableDrivenOperandPrinters[i];
@ -595,12 +594,15 @@ void AsmWriterEmitter::run(std::ostream &O) {
// elements in the vector. // elements in the vector.
std::reverse(Instructions.begin(), Instructions.end()); std::reverse(Instructions.begin(), Instructions.end());
// Find the opcode # of inline asm if (!Instructions.empty()) {
O << " switch (MI->getOpcode()) {\n"; // Find the opcode # of inline asm.
while (!Instructions.empty()) O << " switch (MI->getOpcode()) {\n";
EmitInstructions(Instructions, O); while (!Instructions.empty())
EmitInstructions(Instructions, O);
O << " }\n" O << " }\n";
" return true;\n" }
O << " return true;\n"
"}\n"; "}\n";
} }