1 //===------------ FixedLenDecoderEmitter.cpp - Decoder Generator ----------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // It contains the tablegen backend that emits the decoder functions for 11 // targets with fixed length instruction set. 12 // 13 //===----------------------------------------------------------------------===// 14 15 #define DEBUG_TYPE "decoder-emitter" 16 17 #include "FixedLenDecoderEmitter.h" 18 #include "CodeGenTarget.h" 19 #include "llvm/TableGen/Record.h" 20 #include "llvm/ADT/StringExtras.h" 21 #include "llvm/Support/Debug.h" 22 #include "llvm/Support/raw_ostream.h" 23 24 #include <vector> 25 #include <map> 26 #include <string> 27 28 using namespace llvm; 29 30 // The set (BIT_TRUE, BIT_FALSE, BIT_UNSET) represents a ternary logic system 31 // for a bit value. 32 // 33 // BIT_UNFILTERED is used as the init value for a filter position. It is used 34 // only for filter processings. 35 typedef enum { 36 BIT_TRUE, // '1' 37 BIT_FALSE, // '0' 38 BIT_UNSET, // '?' 39 BIT_UNFILTERED // unfiltered 40 } bit_value_t; 41 42 static bool ValueSet(bit_value_t V) { 43 return (V == BIT_TRUE || V == BIT_FALSE); 44 } 45 static bool ValueNotSet(bit_value_t V) { 46 return (V == BIT_UNSET); 47 } 48 static int Value(bit_value_t V) { 49 return ValueNotSet(V) ? -1 : (V == BIT_FALSE ? 0 : 1); 50 } 51 static bit_value_t bitFromBits(BitsInit &bits, unsigned index) { 52 if (BitInit *bit = dynamic_cast<BitInit*>(bits.getBit(index))) 53 return bit->getValue() ? BIT_TRUE : BIT_FALSE; 54 55 // The bit is uninitialized. 56 return BIT_UNSET; 57 } 58 // Prints the bit value for each position. 59 static void dumpBits(raw_ostream &o, BitsInit &bits) { 60 unsigned index; 61 62 for (index = bits.getNumBits(); index > 0; index--) { 63 switch (bitFromBits(bits, index - 1)) { 64 case BIT_TRUE: 65 o << "1"; 66 break; 67 case BIT_FALSE: 68 o << "0"; 69 break; 70 case BIT_UNSET: 71 o << "_"; 72 break; 73 default: 74 assert(0 && "unexpected return value from bitFromBits"); 75 } 76 } 77 } 78 79 static BitsInit &getBitsField(const Record &def, const char *str) { 80 BitsInit *bits = def.getValueAsBitsInit(str); 81 return *bits; 82 } 83 84 // Forward declaration. 85 class FilterChooser; 86 87 // Representation of the instruction to work on. 88 typedef std::vector<bit_value_t> insn_t; 89 90 /// Filter - Filter works with FilterChooser to produce the decoding tree for 91 /// the ISA. 92 /// 93 /// It is useful to think of a Filter as governing the switch stmts of the 94 /// decoding tree in a certain level. Each case stmt delegates to an inferior 95 /// FilterChooser to decide what further decoding logic to employ, or in another 96 /// words, what other remaining bits to look at. The FilterChooser eventually 97 /// chooses a best Filter to do its job. 98 /// 99 /// This recursive scheme ends when the number of Opcodes assigned to the 100 /// FilterChooser becomes 1 or if there is a conflict. A conflict happens when 101 /// the Filter/FilterChooser combo does not know how to distinguish among the 102 /// Opcodes assigned. 103 /// 104 /// An example of a conflict is 105 /// 106 /// Conflict: 107 /// 111101000.00........00010000.... 108 /// 111101000.00........0001........ 109 /// 1111010...00........0001........ 110 /// 1111010...00.................... 111 /// 1111010......................... 112 /// 1111............................ 113 /// ................................ 114 /// VST4q8a 111101000_00________00010000____ 115 /// VST4q8b 111101000_00________00010000____ 116 /// 117 /// The Debug output shows the path that the decoding tree follows to reach the 118 /// the conclusion that there is a conflict. VST4q8a is a vst4 to double-spaced 119 /// even registers, while VST4q8b is a vst4 to double-spaced odd regsisters. 120 /// 121 /// The encoding info in the .td files does not specify this meta information, 122 /// which could have been used by the decoder to resolve the conflict. The 123 /// decoder could try to decode the even/odd register numbering and assign to 124 /// VST4q8a or VST4q8b, but for the time being, the decoder chooses the "a" 125 /// version and return the Opcode since the two have the same Asm format string. 126 class Filter { 127 protected: 128 FilterChooser *Owner; // points to the FilterChooser who owns this filter 129 unsigned StartBit; // the starting bit position 130 unsigned NumBits; // number of bits to filter 131 bool Mixed; // a mixed region contains both set and unset bits 132 133 // Map of well-known segment value to the set of uid's with that value. 134 std::map<uint64_t, std::vector<unsigned> > FilteredInstructions; 135 136 // Set of uid's with non-constant segment values. 137 std::vector<unsigned> VariableInstructions; 138 139 // Map of well-known segment value to its delegate. 140 std::map<unsigned, FilterChooser*> FilterChooserMap; 141 142 // Number of instructions which fall under FilteredInstructions category. 143 unsigned NumFiltered; 144 145 // Keeps track of the last opcode in the filtered bucket. 146 unsigned LastOpcFiltered; 147 148 // Number of instructions which fall under VariableInstructions category. 149 unsigned NumVariable; 150 151 public: 152 unsigned getNumFiltered() { return NumFiltered; } 153 unsigned getNumVariable() { return NumVariable; } 154 unsigned getSingletonOpc() { 155 assert(NumFiltered == 1); 156 return LastOpcFiltered; 157 } 158 // Return the filter chooser for the group of instructions without constant 159 // segment values. 160 FilterChooser &getVariableFC() { 161 assert(NumFiltered == 1); 162 assert(FilterChooserMap.size() == 1); 163 return *(FilterChooserMap.find((unsigned)-1)->second); 164 } 165 166 Filter(const Filter &f); 167 Filter(FilterChooser &owner, unsigned startBit, unsigned numBits, bool mixed); 168 169 ~Filter(); 170 171 // Divides the decoding task into sub tasks and delegates them to the 172 // inferior FilterChooser's. 173 // 174 // A special case arises when there's only one entry in the filtered 175 // instructions. In order to unambiguously decode the singleton, we need to 176 // match the remaining undecoded encoding bits against the singleton. 177 void recurse(); 178 179 // Emit code to decode instructions given a segment or segments of bits. 180 void emit(raw_ostream &o, unsigned &Indentation); 181 182 // Returns the number of fanout produced by the filter. More fanout implies 183 // the filter distinguishes more categories of instructions. 184 unsigned usefulness() const; 185 }; // End of class Filter 186 187 // These are states of our finite state machines used in FilterChooser's 188 // filterProcessor() which produces the filter candidates to use. 189 typedef enum { 190 ATTR_NONE, 191 ATTR_FILTERED, 192 ATTR_ALL_SET, 193 ATTR_ALL_UNSET, 194 ATTR_MIXED 195 } bitAttr_t; 196 197 /// FilterChooser - FilterChooser chooses the best filter among a set of Filters 198 /// in order to perform the decoding of instructions at the current level. 199 /// 200 /// Decoding proceeds from the top down. Based on the well-known encoding bits 201 /// of instructions available, FilterChooser builds up the possible Filters that 202 /// can further the task of decoding by distinguishing among the remaining 203 /// candidate instructions. 204 /// 205 /// Once a filter has been chosen, it is called upon to divide the decoding task 206 /// into sub-tasks and delegates them to its inferior FilterChoosers for further 207 /// processings. 208 /// 209 /// It is useful to think of a Filter as governing the switch stmts of the 210 /// decoding tree. And each case is delegated to an inferior FilterChooser to 211 /// decide what further remaining bits to look at. 212 class FilterChooser { 213 protected: 214 friend class Filter; 215 216 // Vector of codegen instructions to choose our filter. 217 const std::vector<const CodeGenInstruction*> &AllInstructions; 218 219 // Vector of uid's for this filter chooser to work on. 220 const std::vector<unsigned> Opcodes; 221 222 // Lookup table for the operand decoding of instructions. 223 std::map<unsigned, std::vector<OperandInfo> > &Operands; 224 225 // Vector of candidate filters. 226 std::vector<Filter> Filters; 227 228 // Array of bit values passed down from our parent. 229 // Set to all BIT_UNFILTERED's for Parent == NULL. 230 std::vector<bit_value_t> FilterBitValues; 231 232 // Links to the FilterChooser above us in the decoding tree. 233 FilterChooser *Parent; 234 235 // Index of the best filter from Filters. 236 int BestIndex; 237 238 // Width of instructions 239 unsigned BitWidth; 240 241 // Parent emitter 242 const FixedLenDecoderEmitter *Emitter; 243 244 public: 245 FilterChooser(const FilterChooser &FC) : 246 AllInstructions(FC.AllInstructions), Opcodes(FC.Opcodes), 247 Operands(FC.Operands), Filters(FC.Filters), 248 FilterBitValues(FC.FilterBitValues), Parent(FC.Parent), 249 BestIndex(FC.BestIndex), BitWidth(FC.BitWidth), 250 Emitter(FC.Emitter) { } 251 252 FilterChooser(const std::vector<const CodeGenInstruction*> &Insts, 253 const std::vector<unsigned> &IDs, 254 std::map<unsigned, std::vector<OperandInfo> > &Ops, 255 unsigned BW, 256 const FixedLenDecoderEmitter *E) : 257 AllInstructions(Insts), Opcodes(IDs), Operands(Ops), Filters(), 258 Parent(NULL), BestIndex(-1), BitWidth(BW), Emitter(E) { 259 for (unsigned i = 0; i < BitWidth; ++i) 260 FilterBitValues.push_back(BIT_UNFILTERED); 261 262 doFilter(); 263 } 264 265 FilterChooser(const std::vector<const CodeGenInstruction*> &Insts, 266 const std::vector<unsigned> &IDs, 267 std::map<unsigned, std::vector<OperandInfo> > &Ops, 268 std::vector<bit_value_t> &ParentFilterBitValues, 269 FilterChooser &parent) : 270 AllInstructions(Insts), Opcodes(IDs), Operands(Ops), 271 Filters(), FilterBitValues(ParentFilterBitValues), 272 Parent(&parent), BestIndex(-1), BitWidth(parent.BitWidth), 273 Emitter(parent.Emitter) { 274 doFilter(); 275 } 276 277 // The top level filter chooser has NULL as its parent. 278 bool isTopLevel() { return Parent == NULL; } 279 280 // Emit the top level typedef and decodeInstruction() function. 281 void emitTop(raw_ostream &o, unsigned Indentation, std::string Namespace); 282 283 protected: 284 // Populates the insn given the uid. 285 void insnWithID(insn_t &Insn, unsigned Opcode) const { 286 BitsInit &Bits = getBitsField(*AllInstructions[Opcode]->TheDef, "Inst"); 287 288 for (unsigned i = 0; i < BitWidth; ++i) 289 Insn.push_back(bitFromBits(Bits, i)); 290 } 291 292 // Returns the record name. 293 const std::string &nameWithID(unsigned Opcode) const { 294 return AllInstructions[Opcode]->TheDef->getName(); 295 } 296 297 // Populates the field of the insn given the start position and the number of 298 // consecutive bits to scan for. 299 // 300 // Returns false if there exists any uninitialized bit value in the range. 301 // Returns true, otherwise. 302 bool fieldFromInsn(uint64_t &Field, insn_t &Insn, unsigned StartBit, 303 unsigned NumBits) const; 304 305 /// dumpFilterArray - dumpFilterArray prints out debugging info for the given 306 /// filter array as a series of chars. 307 void dumpFilterArray(raw_ostream &o, std::vector<bit_value_t> & filter); 308 309 /// dumpStack - dumpStack traverses the filter chooser chain and calls 310 /// dumpFilterArray on each filter chooser up to the top level one. 311 void dumpStack(raw_ostream &o, const char *prefix); 312 313 Filter &bestFilter() { 314 assert(BestIndex != -1 && "BestIndex not set"); 315 return Filters[BestIndex]; 316 } 317 318 // Called from Filter::recurse() when singleton exists. For debug purpose. 319 void SingletonExists(unsigned Opc); 320 321 bool PositionFiltered(unsigned i) { 322 return ValueSet(FilterBitValues[i]); 323 } 324 325 // Calculates the island(s) needed to decode the instruction. 326 // This returns a lit of undecoded bits of an instructions, for example, 327 // Inst{20} = 1 && Inst{3-0} == 0b1111 represents two islands of yet-to-be 328 // decoded bits in order to verify that the instruction matches the Opcode. 329 unsigned getIslands(std::vector<unsigned> &StartBits, 330 std::vector<unsigned> &EndBits, std::vector<uint64_t> &FieldVals, 331 insn_t &Insn); 332 333 // Emits code to check the Predicates member of an instruction are true. 334 // Returns true if predicate matches were emitted, false otherwise. 335 bool emitPredicateMatch(raw_ostream &o, unsigned &Indentation,unsigned Opc); 336 337 // Emits code to decode the singleton. Return true if we have matched all the 338 // well-known bits. 339 bool emitSingletonDecoder(raw_ostream &o, unsigned &Indentation,unsigned Opc); 340 341 // Emits code to decode the singleton, and then to decode the rest. 342 void emitSingletonDecoder(raw_ostream &o, unsigned &Indentation,Filter &Best); 343 344 void emitBinaryParser(raw_ostream &o , unsigned &Indentation, 345 OperandInfo &OpInfo); 346 347 // Assign a single filter and run with it. 348 void runSingleFilter(FilterChooser &owner, unsigned startBit, unsigned numBit, 349 bool mixed); 350 351 // reportRegion is a helper function for filterProcessor to mark a region as 352 // eligible for use as a filter region. 353 void reportRegion(bitAttr_t RA, unsigned StartBit, unsigned BitIndex, 354 bool AllowMixed); 355 356 // FilterProcessor scans the well-known encoding bits of the instructions and 357 // builds up a list of candidate filters. It chooses the best filter and 358 // recursively descends down the decoding tree. 359 bool filterProcessor(bool AllowMixed, bool Greedy = true); 360 361 // Decides on the best configuration of filter(s) to use in order to decode 362 // the instructions. A conflict of instructions may occur, in which case we 363 // dump the conflict set to the standard error. 364 void doFilter(); 365 366 // Emits code to decode our share of instructions. Returns true if the 367 // emitted code causes a return, which occurs if we know how to decode 368 // the instruction at this level or the instruction is not decodeable. 369 bool emit(raw_ostream &o, unsigned &Indentation); 370 }; 371 372 /////////////////////////// 373 // // 374 // Filter Implmenetation // 375 // // 376 /////////////////////////// 377 378 Filter::Filter(const Filter &f) : 379 Owner(f.Owner), StartBit(f.StartBit), NumBits(f.NumBits), Mixed(f.Mixed), 380 FilteredInstructions(f.FilteredInstructions), 381 VariableInstructions(f.VariableInstructions), 382 FilterChooserMap(f.FilterChooserMap), NumFiltered(f.NumFiltered), 383 LastOpcFiltered(f.LastOpcFiltered), NumVariable(f.NumVariable) { 384 } 385 386 Filter::Filter(FilterChooser &owner, unsigned startBit, unsigned numBits, 387 bool mixed) : Owner(&owner), StartBit(startBit), NumBits(numBits), 388 Mixed(mixed) { 389 assert(StartBit + NumBits - 1 < Owner->BitWidth); 390 391 NumFiltered = 0; 392 LastOpcFiltered = 0; 393 NumVariable = 0; 394 395 for (unsigned i = 0, e = Owner->Opcodes.size(); i != e; ++i) { 396 insn_t Insn; 397 398 // Populates the insn given the uid. 399 Owner->insnWithID(Insn, Owner->Opcodes[i]); 400 401 uint64_t Field; 402 // Scans the segment for possibly well-specified encoding bits. 403 bool ok = Owner->fieldFromInsn(Field, Insn, StartBit, NumBits); 404 405 if (ok) { 406 // The encoding bits are well-known. Lets add the uid of the 407 // instruction into the bucket keyed off the constant field value. 408 LastOpcFiltered = Owner->Opcodes[i]; 409 FilteredInstructions[Field].push_back(LastOpcFiltered); 410 ++NumFiltered; 411 } else { 412 // Some of the encoding bit(s) are unspecfied. This contributes to 413 // one additional member of "Variable" instructions. 414 VariableInstructions.push_back(Owner->Opcodes[i]); 415 ++NumVariable; 416 } 417 } 418 419 assert((FilteredInstructions.size() + VariableInstructions.size() > 0) 420 && "Filter returns no instruction categories"); 421 } 422 423 Filter::~Filter() { 424 std::map<unsigned, FilterChooser*>::iterator filterIterator; 425 for (filterIterator = FilterChooserMap.begin(); 426 filterIterator != FilterChooserMap.end(); 427 filterIterator++) { 428 delete filterIterator->second; 429 } 430 } 431 432 // Divides the decoding task into sub tasks and delegates them to the 433 // inferior FilterChooser's. 434 // 435 // A special case arises when there's only one entry in the filtered 436 // instructions. In order to unambiguously decode the singleton, we need to 437 // match the remaining undecoded encoding bits against the singleton. 438 void Filter::recurse() { 439 std::map<uint64_t, std::vector<unsigned> >::const_iterator mapIterator; 440 441 // Starts by inheriting our parent filter chooser's filter bit values. 442 std::vector<bit_value_t> BitValueArray(Owner->FilterBitValues); 443 444 unsigned bitIndex; 445 446 if (VariableInstructions.size()) { 447 // Conservatively marks each segment position as BIT_UNSET. 448 for (bitIndex = 0; bitIndex < NumBits; bitIndex++) 449 BitValueArray[StartBit + bitIndex] = BIT_UNSET; 450 451 // Delegates to an inferior filter chooser for further processing on this 452 // group of instructions whose segment values are variable. 453 FilterChooserMap.insert(std::pair<unsigned, FilterChooser*>( 454 (unsigned)-1, 455 new FilterChooser(Owner->AllInstructions, 456 VariableInstructions, 457 Owner->Operands, 458 BitValueArray, 459 *Owner) 460 )); 461 } 462 463 // No need to recurse for a singleton filtered instruction. 464 // See also Filter::emit(). 465 if (getNumFiltered() == 1) { 466 //Owner->SingletonExists(LastOpcFiltered); 467 assert(FilterChooserMap.size() == 1); 468 return; 469 } 470 471 // Otherwise, create sub choosers. 472 for (mapIterator = FilteredInstructions.begin(); 473 mapIterator != FilteredInstructions.end(); 474 mapIterator++) { 475 476 // Marks all the segment positions with either BIT_TRUE or BIT_FALSE. 477 for (bitIndex = 0; bitIndex < NumBits; bitIndex++) { 478 if (mapIterator->first & (1ULL << bitIndex)) 479 BitValueArray[StartBit + bitIndex] = BIT_TRUE; 480 else 481 BitValueArray[StartBit + bitIndex] = BIT_FALSE; 482 } 483 484 // Delegates to an inferior filter chooser for further processing on this 485 // category of instructions. 486 FilterChooserMap.insert(std::pair<unsigned, FilterChooser*>( 487 mapIterator->first, 488 new FilterChooser(Owner->AllInstructions, 489 mapIterator->second, 490 Owner->Operands, 491 BitValueArray, 492 *Owner) 493 )); 494 } 495 } 496 497 // Emit code to decode instructions given a segment or segments of bits. 498 void Filter::emit(raw_ostream &o, unsigned &Indentation) { 499 o.indent(Indentation) << "// Check Inst{"; 500 501 if (NumBits > 1) 502 o << (StartBit + NumBits - 1) << '-'; 503 504 o << StartBit << "} ...\n"; 505 506 o.indent(Indentation) << "switch (fieldFromInstruction" << Owner->BitWidth 507 << "(insn, " << StartBit << ", " 508 << NumBits << ")) {\n"; 509 510 std::map<unsigned, FilterChooser*>::iterator filterIterator; 511 512 bool DefaultCase = false; 513 for (filterIterator = FilterChooserMap.begin(); 514 filterIterator != FilterChooserMap.end(); 515 filterIterator++) { 516 517 // Field value -1 implies a non-empty set of variable instructions. 518 // See also recurse(). 519 if (filterIterator->first == (unsigned)-1) { 520 DefaultCase = true; 521 522 o.indent(Indentation) << "default:\n"; 523 o.indent(Indentation) << " break; // fallthrough\n"; 524 525 // Closing curly brace for the switch statement. 526 // This is unconventional because we want the default processing to be 527 // performed for the fallthrough cases as well, i.e., when the "cases" 528 // did not prove a decoded instruction. 529 o.indent(Indentation) << "}\n"; 530 531 } else 532 o.indent(Indentation) << "case " << filterIterator->first << ":\n"; 533 534 // We arrive at a category of instructions with the same segment value. 535 // Now delegate to the sub filter chooser for further decodings. 536 // The case may fallthrough, which happens if the remaining well-known 537 // encoding bits do not match exactly. 538 if (!DefaultCase) { ++Indentation; ++Indentation; } 539 540 bool finished = filterIterator->second->emit(o, Indentation); 541 // For top level default case, there's no need for a break statement. 542 if (Owner->isTopLevel() && DefaultCase) 543 break; 544 if (!finished) 545 o.indent(Indentation) << "break;\n"; 546 547 if (!DefaultCase) { --Indentation; --Indentation; } 548 } 549 550 // If there is no default case, we still need to supply a closing brace. 551 if (!DefaultCase) { 552 // Closing curly brace for the switch statement. 553 o.indent(Indentation) << "}\n"; 554 } 555 } 556 557 // Returns the number of fanout produced by the filter. More fanout implies 558 // the filter distinguishes more categories of instructions. 559 unsigned Filter::usefulness() const { 560 if (VariableInstructions.size()) 561 return FilteredInstructions.size(); 562 else 563 return FilteredInstructions.size() + 1; 564 } 565 566 ////////////////////////////////// 567 // // 568 // Filterchooser Implementation // 569 // // 570 ////////////////////////////////// 571 572 // Emit the top level typedef and decodeInstruction() function. 573 void FilterChooser::emitTop(raw_ostream &o, unsigned Indentation, 574 std::string Namespace) { 575 o.indent(Indentation) << 576 "static MCDisassembler::DecodeStatus decode" << Namespace << "Instruction" << BitWidth 577 << "(MCInst &MI, uint" << BitWidth << "_t insn, uint64_t Address, " 578 << "const void *Decoder, const MCSubtargetInfo &STI) {\n"; 579 o.indent(Indentation) << " unsigned tmp = 0;\n (void)tmp;\n" << Emitter->Locals << "\n"; 580 o.indent(Indentation) << " uint64_t Bits = STI.getFeatureBits();\n"; 581 582 ++Indentation; ++Indentation; 583 // Emits code to decode the instructions. 584 emit(o, Indentation); 585 586 o << '\n'; 587 o.indent(Indentation) << "return " << Emitter->ReturnFail << ";\n"; 588 --Indentation; --Indentation; 589 590 o.indent(Indentation) << "}\n"; 591 592 o << '\n'; 593 } 594 595 // Populates the field of the insn given the start position and the number of 596 // consecutive bits to scan for. 597 // 598 // Returns false if and on the first uninitialized bit value encountered. 599 // Returns true, otherwise. 600 bool FilterChooser::fieldFromInsn(uint64_t &Field, insn_t &Insn, 601 unsigned StartBit, unsigned NumBits) const { 602 Field = 0; 603 604 for (unsigned i = 0; i < NumBits; ++i) { 605 if (Insn[StartBit + i] == BIT_UNSET) 606 return false; 607 608 if (Insn[StartBit + i] == BIT_TRUE) 609 Field = Field | (1ULL << i); 610 } 611 612 return true; 613 } 614 615 /// dumpFilterArray - dumpFilterArray prints out debugging info for the given 616 /// filter array as a series of chars. 617 void FilterChooser::dumpFilterArray(raw_ostream &o, 618 std::vector<bit_value_t> &filter) { 619 unsigned bitIndex; 620 621 for (bitIndex = BitWidth; bitIndex > 0; bitIndex--) { 622 switch (filter[bitIndex - 1]) { 623 case BIT_UNFILTERED: 624 o << "."; 625 break; 626 case BIT_UNSET: 627 o << "_"; 628 break; 629 case BIT_TRUE: 630 o << "1"; 631 break; 632 case BIT_FALSE: 633 o << "0"; 634 break; 635 } 636 } 637 } 638 639 /// dumpStack - dumpStack traverses the filter chooser chain and calls 640 /// dumpFilterArray on each filter chooser up to the top level one. 641 void FilterChooser::dumpStack(raw_ostream &o, const char *prefix) { 642 FilterChooser *current = this; 643 644 while (current) { 645 o << prefix; 646 dumpFilterArray(o, current->FilterBitValues); 647 o << '\n'; 648 current = current->Parent; 649 } 650 } 651 652 // Called from Filter::recurse() when singleton exists. For debug purpose. 653 void FilterChooser::SingletonExists(unsigned Opc) { 654 insn_t Insn0; 655 insnWithID(Insn0, Opc); 656 657 errs() << "Singleton exists: " << nameWithID(Opc) 658 << " with its decoding dominating "; 659 for (unsigned i = 0; i < Opcodes.size(); ++i) { 660 if (Opcodes[i] == Opc) continue; 661 errs() << nameWithID(Opcodes[i]) << ' '; 662 } 663 errs() << '\n'; 664 665 dumpStack(errs(), "\t\t"); 666 for (unsigned i = 0; i < Opcodes.size(); i++) { 667 const std::string &Name = nameWithID(Opcodes[i]); 668 669 errs() << '\t' << Name << " "; 670 dumpBits(errs(), 671 getBitsField(*AllInstructions[Opcodes[i]]->TheDef, "Inst")); 672 errs() << '\n'; 673 } 674 } 675 676 // Calculates the island(s) needed to decode the instruction. 677 // This returns a list of undecoded bits of an instructions, for example, 678 // Inst{20} = 1 && Inst{3-0} == 0b1111 represents two islands of yet-to-be 679 // decoded bits in order to verify that the instruction matches the Opcode. 680 unsigned FilterChooser::getIslands(std::vector<unsigned> &StartBits, 681 std::vector<unsigned> &EndBits, std::vector<uint64_t> &FieldVals, 682 insn_t &Insn) { 683 unsigned Num, BitNo; 684 Num = BitNo = 0; 685 686 uint64_t FieldVal = 0; 687 688 // 0: Init 689 // 1: Water (the bit value does not affect decoding) 690 // 2: Island (well-known bit value needed for decoding) 691 int State = 0; 692 int Val = -1; 693 694 for (unsigned i = 0; i < BitWidth; ++i) { 695 Val = Value(Insn[i]); 696 bool Filtered = PositionFiltered(i); 697 switch (State) { 698 default: 699 assert(0 && "Unreachable code!"); 700 break; 701 case 0: 702 case 1: 703 if (Filtered || Val == -1) 704 State = 1; // Still in Water 705 else { 706 State = 2; // Into the Island 707 BitNo = 0; 708 StartBits.push_back(i); 709 FieldVal = Val; 710 } 711 break; 712 case 2: 713 if (Filtered || Val == -1) { 714 State = 1; // Into the Water 715 EndBits.push_back(i - 1); 716 FieldVals.push_back(FieldVal); 717 ++Num; 718 } else { 719 State = 2; // Still in Island 720 ++BitNo; 721 FieldVal = FieldVal | Val << BitNo; 722 } 723 break; 724 } 725 } 726 // If we are still in Island after the loop, do some housekeeping. 727 if (State == 2) { 728 EndBits.push_back(BitWidth - 1); 729 FieldVals.push_back(FieldVal); 730 ++Num; 731 } 732 733 assert(StartBits.size() == Num && EndBits.size() == Num && 734 FieldVals.size() == Num); 735 return Num; 736 } 737 738 void FilterChooser::emitBinaryParser(raw_ostream &o, unsigned &Indentation, 739 OperandInfo &OpInfo) { 740 std::string &Decoder = OpInfo.Decoder; 741 742 if (OpInfo.numFields() == 1) { 743 OperandInfo::iterator OI = OpInfo.begin(); 744 o.indent(Indentation) << " tmp = fieldFromInstruction" << BitWidth 745 << "(insn, " << OI->Base << ", " << OI->Width 746 << ");\n"; 747 } else { 748 o.indent(Indentation) << " tmp = 0;\n"; 749 for (OperandInfo::iterator OI = OpInfo.begin(), OE = OpInfo.end(); 750 OI != OE; ++OI) { 751 o.indent(Indentation) << " tmp |= (fieldFromInstruction" << BitWidth 752 << "(insn, " << OI->Base << ", " << OI->Width 753 << ") << " << OI->Offset << ");\n"; 754 } 755 } 756 757 if (Decoder != "") 758 o.indent(Indentation) << " " << Emitter->GuardPrefix << Decoder 759 << "(MI, tmp, Address, Decoder)" << Emitter->GuardPostfix << "\n"; 760 else 761 o.indent(Indentation) << " MI.addOperand(MCOperand::CreateImm(tmp));\n"; 762 763 } 764 765 static void emitSinglePredicateMatch(raw_ostream &o, StringRef str, 766 std::string PredicateNamespace) { 767 if (str[0] == '!') 768 o << "!(Bits & " << PredicateNamespace << "::" 769 << str.slice(1,str.size()) << ")"; 770 else 771 o << "(Bits & " << PredicateNamespace << "::" << str << ")"; 772 } 773 774 bool FilterChooser::emitPredicateMatch(raw_ostream &o, unsigned &Indentation, 775 unsigned Opc) { 776 ListInit *Predicates = AllInstructions[Opc]->TheDef->getValueAsListInit("Predicates"); 777 for (unsigned i = 0; i < Predicates->getSize(); ++i) { 778 Record *Pred = Predicates->getElementAsRecord(i); 779 if (!Pred->getValue("AssemblerMatcherPredicate")) 780 continue; 781 782 std::string P = Pred->getValueAsString("AssemblerCondString"); 783 784 if (!P.length()) 785 continue; 786 787 if (i != 0) 788 o << " && "; 789 790 StringRef SR(P); 791 std::pair<StringRef, StringRef> pairs = SR.split(','); 792 while (pairs.second.size()) { 793 emitSinglePredicateMatch(o, pairs.first, Emitter->PredicateNamespace); 794 o << " && "; 795 pairs = pairs.second.split(','); 796 } 797 emitSinglePredicateMatch(o, pairs.first, Emitter->PredicateNamespace); 798 } 799 return Predicates->getSize() > 0; 800 } 801 802 // Emits code to decode the singleton. Return true if we have matched all the 803 // well-known bits. 804 bool FilterChooser::emitSingletonDecoder(raw_ostream &o, unsigned &Indentation, 805 unsigned Opc) { 806 std::vector<unsigned> StartBits; 807 std::vector<unsigned> EndBits; 808 std::vector<uint64_t> FieldVals; 809 insn_t Insn; 810 insnWithID(Insn, Opc); 811 812 // Look for islands of undecoded bits of the singleton. 813 getIslands(StartBits, EndBits, FieldVals, Insn); 814 815 unsigned Size = StartBits.size(); 816 unsigned I, NumBits; 817 818 // If we have matched all the well-known bits, just issue a return. 819 if (Size == 0) { 820 o.indent(Indentation) << "if ("; 821 if (!emitPredicateMatch(o, Indentation, Opc)) 822 o << "1"; 823 o << ") {\n"; 824 o.indent(Indentation) << " MI.setOpcode(" << Opc << ");\n"; 825 std::vector<OperandInfo>& InsnOperands = Operands[Opc]; 826 for (std::vector<OperandInfo>::iterator 827 I = InsnOperands.begin(), E = InsnOperands.end(); I != E; ++I) { 828 // If a custom instruction decoder was specified, use that. 829 if (I->numFields() == 0 && I->Decoder.size()) { 830 o.indent(Indentation) << " " << Emitter->GuardPrefix << I->Decoder 831 << "(MI, insn, Address, Decoder)" << Emitter->GuardPostfix << "\n"; 832 break; 833 } 834 835 emitBinaryParser(o, Indentation, *I); 836 } 837 838 o.indent(Indentation) << " return " << Emitter->ReturnOK << "; // " << nameWithID(Opc) 839 << '\n'; 840 o.indent(Indentation) << "}\n"; // Closing predicate block. 841 return true; 842 } 843 844 // Otherwise, there are more decodings to be done! 845 846 // Emit code to match the island(s) for the singleton. 847 o.indent(Indentation) << "// Check "; 848 849 for (I = Size; I != 0; --I) { 850 o << "Inst{" << EndBits[I-1] << '-' << StartBits[I-1] << "} "; 851 if (I > 1) 852 o << " && "; 853 else 854 o << "for singleton decoding...\n"; 855 } 856 857 o.indent(Indentation) << "if ("; 858 if (emitPredicateMatch(o, Indentation, Opc)) { 859 o << " &&\n"; 860 o.indent(Indentation+4); 861 } 862 863 for (I = Size; I != 0; --I) { 864 NumBits = EndBits[I-1] - StartBits[I-1] + 1; 865 o << "fieldFromInstruction" << BitWidth << "(insn, " 866 << StartBits[I-1] << ", " << NumBits 867 << ") == " << FieldVals[I-1]; 868 if (I > 1) 869 o << " && "; 870 else 871 o << ") {\n"; 872 } 873 o.indent(Indentation) << " MI.setOpcode(" << Opc << ");\n"; 874 std::vector<OperandInfo>& InsnOperands = Operands[Opc]; 875 for (std::vector<OperandInfo>::iterator 876 I = InsnOperands.begin(), E = InsnOperands.end(); I != E; ++I) { 877 // If a custom instruction decoder was specified, use that. 878 if (I->numFields() == 0 && I->Decoder.size()) { 879 o.indent(Indentation) << " " << Emitter->GuardPrefix << I->Decoder 880 << "(MI, insn, Address, Decoder)" << Emitter->GuardPostfix << "\n"; 881 break; 882 } 883 884 emitBinaryParser(o, Indentation, *I); 885 } 886 o.indent(Indentation) << " return " << Emitter->ReturnOK << "; // " << nameWithID(Opc) 887 << '\n'; 888 o.indent(Indentation) << "}\n"; 889 890 return false; 891 } 892 893 // Emits code to decode the singleton, and then to decode the rest. 894 void FilterChooser::emitSingletonDecoder(raw_ostream &o, unsigned &Indentation, 895 Filter &Best) { 896 897 unsigned Opc = Best.getSingletonOpc(); 898 899 emitSingletonDecoder(o, Indentation, Opc); 900 901 // Emit code for the rest. 902 o.indent(Indentation) << "else\n"; 903 904 Indentation += 2; 905 Best.getVariableFC().emit(o, Indentation); 906 Indentation -= 2; 907 } 908 909 // Assign a single filter and run with it. Top level API client can initialize 910 // with a single filter to start the filtering process. 911 void FilterChooser::runSingleFilter(FilterChooser &owner, unsigned startBit, 912 unsigned numBit, bool mixed) { 913 Filters.clear(); 914 Filter F(*this, startBit, numBit, true); 915 Filters.push_back(F); 916 BestIndex = 0; // Sole Filter instance to choose from. 917 bestFilter().recurse(); 918 } 919 920 // reportRegion is a helper function for filterProcessor to mark a region as 921 // eligible for use as a filter region. 922 void FilterChooser::reportRegion(bitAttr_t RA, unsigned StartBit, 923 unsigned BitIndex, bool AllowMixed) { 924 if (RA == ATTR_MIXED && AllowMixed) 925 Filters.push_back(Filter(*this, StartBit, BitIndex - StartBit, true)); 926 else if (RA == ATTR_ALL_SET && !AllowMixed) 927 Filters.push_back(Filter(*this, StartBit, BitIndex - StartBit, false)); 928 } 929 930 // FilterProcessor scans the well-known encoding bits of the instructions and 931 // builds up a list of candidate filters. It chooses the best filter and 932 // recursively descends down the decoding tree. 933 bool FilterChooser::filterProcessor(bool AllowMixed, bool Greedy) { 934 Filters.clear(); 935 BestIndex = -1; 936 unsigned numInstructions = Opcodes.size(); 937 938 assert(numInstructions && "Filter created with no instructions"); 939 940 // No further filtering is necessary. 941 if (numInstructions == 1) 942 return true; 943 944 // Heuristics. See also doFilter()'s "Heuristics" comment when num of 945 // instructions is 3. 946 if (AllowMixed && !Greedy) { 947 assert(numInstructions == 3); 948 949 for (unsigned i = 0; i < Opcodes.size(); ++i) { 950 std::vector<unsigned> StartBits; 951 std::vector<unsigned> EndBits; 952 std::vector<uint64_t> FieldVals; 953 insn_t Insn; 954 955 insnWithID(Insn, Opcodes[i]); 956 957 // Look for islands of undecoded bits of any instruction. 958 if (getIslands(StartBits, EndBits, FieldVals, Insn) > 0) { 959 // Found an instruction with island(s). Now just assign a filter. 960 runSingleFilter(*this, StartBits[0], EndBits[0] - StartBits[0] + 1, 961 true); 962 return true; 963 } 964 } 965 } 966 967 unsigned BitIndex, InsnIndex; 968 969 // We maintain BIT_WIDTH copies of the bitAttrs automaton. 970 // The automaton consumes the corresponding bit from each 971 // instruction. 972 // 973 // Input symbols: 0, 1, and _ (unset). 974 // States: NONE, FILTERED, ALL_SET, ALL_UNSET, and MIXED. 975 // Initial state: NONE. 976 // 977 // (NONE) ------- [01] -> (ALL_SET) 978 // (NONE) ------- _ ----> (ALL_UNSET) 979 // (ALL_SET) ---- [01] -> (ALL_SET) 980 // (ALL_SET) ---- _ ----> (MIXED) 981 // (ALL_UNSET) -- [01] -> (MIXED) 982 // (ALL_UNSET) -- _ ----> (ALL_UNSET) 983 // (MIXED) ------ . ----> (MIXED) 984 // (FILTERED)---- . ----> (FILTERED) 985 986 std::vector<bitAttr_t> bitAttrs; 987 988 // FILTERED bit positions provide no entropy and are not worthy of pursuing. 989 // Filter::recurse() set either BIT_TRUE or BIT_FALSE for each position. 990 for (BitIndex = 0; BitIndex < BitWidth; ++BitIndex) 991 if (FilterBitValues[BitIndex] == BIT_TRUE || 992 FilterBitValues[BitIndex] == BIT_FALSE) 993 bitAttrs.push_back(ATTR_FILTERED); 994 else 995 bitAttrs.push_back(ATTR_NONE); 996 997 for (InsnIndex = 0; InsnIndex < numInstructions; ++InsnIndex) { 998 insn_t insn; 999 1000 insnWithID(insn, Opcodes[InsnIndex]); 1001 1002 for (BitIndex = 0; BitIndex < BitWidth; ++BitIndex) { 1003 switch (bitAttrs[BitIndex]) { 1004 case ATTR_NONE: 1005 if (insn[BitIndex] == BIT_UNSET) 1006 bitAttrs[BitIndex] = ATTR_ALL_UNSET; 1007 else 1008 bitAttrs[BitIndex] = ATTR_ALL_SET; 1009 break; 1010 case ATTR_ALL_SET: 1011 if (insn[BitIndex] == BIT_UNSET) 1012 bitAttrs[BitIndex] = ATTR_MIXED; 1013 break; 1014 case ATTR_ALL_UNSET: 1015 if (insn[BitIndex] != BIT_UNSET) 1016 bitAttrs[BitIndex] = ATTR_MIXED; 1017 break; 1018 case ATTR_MIXED: 1019 case ATTR_FILTERED: 1020 break; 1021 } 1022 } 1023 } 1024 1025 // The regionAttr automaton consumes the bitAttrs automatons' state, 1026 // lowest-to-highest. 1027 // 1028 // Input symbols: F(iltered), (all_)S(et), (all_)U(nset), M(ixed) 1029 // States: NONE, ALL_SET, MIXED 1030 // Initial state: NONE 1031 // 1032 // (NONE) ----- F --> (NONE) 1033 // (NONE) ----- S --> (ALL_SET) ; and set region start 1034 // (NONE) ----- U --> (NONE) 1035 // (NONE) ----- M --> (MIXED) ; and set region start 1036 // (ALL_SET) -- F --> (NONE) ; and report an ALL_SET region 1037 // (ALL_SET) -- S --> (ALL_SET) 1038 // (ALL_SET) -- U --> (NONE) ; and report an ALL_SET region 1039 // (ALL_SET) -- M --> (MIXED) ; and report an ALL_SET region 1040 // (MIXED) ---- F --> (NONE) ; and report a MIXED region 1041 // (MIXED) ---- S --> (ALL_SET) ; and report a MIXED region 1042 // (MIXED) ---- U --> (NONE) ; and report a MIXED region 1043 // (MIXED) ---- M --> (MIXED) 1044 1045 bitAttr_t RA = ATTR_NONE; 1046 unsigned StartBit = 0; 1047 1048 for (BitIndex = 0; BitIndex < BitWidth; BitIndex++) { 1049 bitAttr_t bitAttr = bitAttrs[BitIndex]; 1050 1051 assert(bitAttr != ATTR_NONE && "Bit without attributes"); 1052 1053 switch (RA) { 1054 case ATTR_NONE: 1055 switch (bitAttr) { 1056 case ATTR_FILTERED: 1057 break; 1058 case ATTR_ALL_SET: 1059 StartBit = BitIndex; 1060 RA = ATTR_ALL_SET; 1061 break; 1062 case ATTR_ALL_UNSET: 1063 break; 1064 case ATTR_MIXED: 1065 StartBit = BitIndex; 1066 RA = ATTR_MIXED; 1067 break; 1068 default: 1069 assert(0 && "Unexpected bitAttr!"); 1070 } 1071 break; 1072 case ATTR_ALL_SET: 1073 switch (bitAttr) { 1074 case ATTR_FILTERED: 1075 reportRegion(RA, StartBit, BitIndex, AllowMixed); 1076 RA = ATTR_NONE; 1077 break; 1078 case ATTR_ALL_SET: 1079 break; 1080 case ATTR_ALL_UNSET: 1081 reportRegion(RA, StartBit, BitIndex, AllowMixed); 1082 RA = ATTR_NONE; 1083 break; 1084 case ATTR_MIXED: 1085 reportRegion(RA, StartBit, BitIndex, AllowMixed); 1086 StartBit = BitIndex; 1087 RA = ATTR_MIXED; 1088 break; 1089 default: 1090 assert(0 && "Unexpected bitAttr!"); 1091 } 1092 break; 1093 case ATTR_MIXED: 1094 switch (bitAttr) { 1095 case ATTR_FILTERED: 1096 reportRegion(RA, StartBit, BitIndex, AllowMixed); 1097 StartBit = BitIndex; 1098 RA = ATTR_NONE; 1099 break; 1100 case ATTR_ALL_SET: 1101 reportRegion(RA, StartBit, BitIndex, AllowMixed); 1102 StartBit = BitIndex; 1103 RA = ATTR_ALL_SET; 1104 break; 1105 case ATTR_ALL_UNSET: 1106 reportRegion(RA, StartBit, BitIndex, AllowMixed); 1107 RA = ATTR_NONE; 1108 break; 1109 case ATTR_MIXED: 1110 break; 1111 default: 1112 assert(0 && "Unexpected bitAttr!"); 1113 } 1114 break; 1115 case ATTR_ALL_UNSET: 1116 assert(0 && "regionAttr state machine has no ATTR_UNSET state"); 1117 case ATTR_FILTERED: 1118 assert(0 && "regionAttr state machine has no ATTR_FILTERED state"); 1119 } 1120 } 1121 1122 // At the end, if we're still in ALL_SET or MIXED states, report a region 1123 switch (RA) { 1124 case ATTR_NONE: 1125 break; 1126 case ATTR_FILTERED: 1127 break; 1128 case ATTR_ALL_SET: 1129 reportRegion(RA, StartBit, BitIndex, AllowMixed); 1130 break; 1131 case ATTR_ALL_UNSET: 1132 break; 1133 case ATTR_MIXED: 1134 reportRegion(RA, StartBit, BitIndex, AllowMixed); 1135 break; 1136 } 1137 1138 // We have finished with the filter processings. Now it's time to choose 1139 // the best performing filter. 1140 BestIndex = 0; 1141 bool AllUseless = true; 1142 unsigned BestScore = 0; 1143 1144 for (unsigned i = 0, e = Filters.size(); i != e; ++i) { 1145 unsigned Usefulness = Filters[i].usefulness(); 1146 1147 if (Usefulness) 1148 AllUseless = false; 1149 1150 if (Usefulness > BestScore) { 1151 BestIndex = i; 1152 BestScore = Usefulness; 1153 } 1154 } 1155 1156 if (!AllUseless) 1157 bestFilter().recurse(); 1158 1159 return !AllUseless; 1160 } // end of FilterChooser::filterProcessor(bool) 1161 1162 // Decides on the best configuration of filter(s) to use in order to decode 1163 // the instructions. A conflict of instructions may occur, in which case we 1164 // dump the conflict set to the standard error. 1165 void FilterChooser::doFilter() { 1166 unsigned Num = Opcodes.size(); 1167 assert(Num && "FilterChooser created with no instructions"); 1168 1169 // Try regions of consecutive known bit values first. 1170 if (filterProcessor(false)) 1171 return; 1172 1173 // Then regions of mixed bits (both known and unitialized bit values allowed). 1174 if (filterProcessor(true)) 1175 return; 1176 1177 // Heuristics to cope with conflict set {t2CMPrs, t2SUBSrr, t2SUBSrs} where 1178 // no single instruction for the maximum ATTR_MIXED region Inst{14-4} has a 1179 // well-known encoding pattern. In such case, we backtrack and scan for the 1180 // the very first consecutive ATTR_ALL_SET region and assign a filter to it. 1181 if (Num == 3 && filterProcessor(true, false)) 1182 return; 1183 1184 // If we come to here, the instruction decoding has failed. 1185 // Set the BestIndex to -1 to indicate so. 1186 BestIndex = -1; 1187 } 1188 1189 // Emits code to decode our share of instructions. Returns true if the 1190 // emitted code causes a return, which occurs if we know how to decode 1191 // the instruction at this level or the instruction is not decodeable. 1192 bool FilterChooser::emit(raw_ostream &o, unsigned &Indentation) { 1193 if (Opcodes.size() == 1) 1194 // There is only one instruction in the set, which is great! 1195 // Call emitSingletonDecoder() to see whether there are any remaining 1196 // encodings bits. 1197 return emitSingletonDecoder(o, Indentation, Opcodes[0]); 1198 1199 // Choose the best filter to do the decodings! 1200 if (BestIndex != -1) { 1201 Filter &Best = bestFilter(); 1202 if (Best.getNumFiltered() == 1) 1203 emitSingletonDecoder(o, Indentation, Best); 1204 else 1205 bestFilter().emit(o, Indentation); 1206 return false; 1207 } 1208 1209 // We don't know how to decode these instructions! Return 0 and dump the 1210 // conflict set! 1211 o.indent(Indentation) << "return 0;" << " // Conflict set: "; 1212 for (int i = 0, N = Opcodes.size(); i < N; ++i) { 1213 o << nameWithID(Opcodes[i]); 1214 if (i < (N - 1)) 1215 o << ", "; 1216 else 1217 o << '\n'; 1218 } 1219 1220 // Print out useful conflict information for postmortem analysis. 1221 errs() << "Decoding Conflict:\n"; 1222 1223 dumpStack(errs(), "\t\t"); 1224 1225 for (unsigned i = 0; i < Opcodes.size(); i++) { 1226 const std::string &Name = nameWithID(Opcodes[i]); 1227 1228 errs() << '\t' << Name << " "; 1229 dumpBits(errs(), 1230 getBitsField(*AllInstructions[Opcodes[i]]->TheDef, "Inst")); 1231 errs() << '\n'; 1232 } 1233 1234 return true; 1235 } 1236 1237 static bool populateInstruction(const CodeGenInstruction &CGI, 1238 unsigned Opc, 1239 std::map<unsigned, std::vector<OperandInfo> >& Operands){ 1240 const Record &Def = *CGI.TheDef; 1241 // If all the bit positions are not specified; do not decode this instruction. 1242 // We are bound to fail! For proper disassembly, the well-known encoding bits 1243 // of the instruction must be fully specified. 1244 // 1245 // This also removes pseudo instructions from considerations of disassembly, 1246 // which is a better design and less fragile than the name matchings. 1247 // Ignore "asm parser only" instructions. 1248 if (Def.getValueAsBit("isAsmParserOnly") || 1249 Def.getValueAsBit("isCodeGenOnly")) 1250 return false; 1251 1252 BitsInit &Bits = getBitsField(Def, "Inst"); 1253 if (Bits.allInComplete()) return false; 1254 1255 std::vector<OperandInfo> InsnOperands; 1256 1257 // If the instruction has specified a custom decoding hook, use that instead 1258 // of trying to auto-generate the decoder. 1259 std::string InstDecoder = Def.getValueAsString("DecoderMethod"); 1260 if (InstDecoder != "") { 1261 InsnOperands.push_back(OperandInfo(InstDecoder)); 1262 Operands[Opc] = InsnOperands; 1263 return true; 1264 } 1265 1266 // Generate a description of the operand of the instruction that we know 1267 // how to decode automatically. 1268 // FIXME: We'll need to have a way to manually override this as needed. 1269 1270 // Gather the outputs/inputs of the instruction, so we can find their 1271 // positions in the encoding. This assumes for now that they appear in the 1272 // MCInst in the order that they're listed. 1273 std::vector<std::pair<Init*, std::string> > InOutOperands; 1274 DagInit *Out = Def.getValueAsDag("OutOperandList"); 1275 DagInit *In = Def.getValueAsDag("InOperandList"); 1276 for (unsigned i = 0; i < Out->getNumArgs(); ++i) 1277 InOutOperands.push_back(std::make_pair(Out->getArg(i), Out->getArgName(i))); 1278 for (unsigned i = 0; i < In->getNumArgs(); ++i) 1279 InOutOperands.push_back(std::make_pair(In->getArg(i), In->getArgName(i))); 1280 1281 // Search for tied operands, so that we can correctly instantiate 1282 // operands that are not explicitly represented in the encoding. 1283 std::map<std::string, std::string> TiedNames; 1284 for (unsigned i = 0; i < CGI.Operands.size(); ++i) { 1285 int tiedTo = CGI.Operands[i].getTiedRegister(); 1286 if (tiedTo != -1) { 1287 TiedNames[InOutOperands[i].second] = InOutOperands[tiedTo].second; 1288 TiedNames[InOutOperands[tiedTo].second] = InOutOperands[i].second; 1289 } 1290 } 1291 1292 // For each operand, see if we can figure out where it is encoded. 1293 for (std::vector<std::pair<Init*, std::string> >::iterator 1294 NI = InOutOperands.begin(), NE = InOutOperands.end(); NI != NE; ++NI) { 1295 std::string Decoder = ""; 1296 1297 // At this point, we can locate the field, but we need to know how to 1298 // interpret it. As a first step, require the target to provide callbacks 1299 // for decoding register classes. 1300 // FIXME: This need to be extended to handle instructions with custom 1301 // decoder methods, and operands with (simple) MIOperandInfo's. 1302 TypedInit *TI = dynamic_cast<TypedInit*>(NI->first); 1303 RecordRecTy *Type = dynamic_cast<RecordRecTy*>(TI->getType()); 1304 Record *TypeRecord = Type->getRecord(); 1305 bool isReg = false; 1306 if (TypeRecord->isSubClassOf("RegisterOperand")) 1307 TypeRecord = TypeRecord->getValueAsDef("RegClass"); 1308 if (TypeRecord->isSubClassOf("RegisterClass")) { 1309 Decoder = "Decode" + TypeRecord->getName() + "RegisterClass"; 1310 isReg = true; 1311 } 1312 1313 RecordVal *DecoderString = TypeRecord->getValue("DecoderMethod"); 1314 StringInit *String = DecoderString ? 1315 dynamic_cast<StringInit*>(DecoderString->getValue()) : 0; 1316 if (!isReg && String && String->getValue() != "") 1317 Decoder = String->getValue(); 1318 1319 OperandInfo OpInfo(Decoder); 1320 unsigned Base = ~0U; 1321 unsigned Width = 0; 1322 unsigned Offset = 0; 1323 1324 for (unsigned bi = 0; bi < Bits.getNumBits(); ++bi) { 1325 VarInit *Var = 0; 1326 VarBitInit *BI = dynamic_cast<VarBitInit*>(Bits.getBit(bi)); 1327 if (BI) 1328 Var = dynamic_cast<VarInit*>(BI->getVariable()); 1329 else 1330 Var = dynamic_cast<VarInit*>(Bits.getBit(bi)); 1331 1332 if (!Var) { 1333 if (Base != ~0U) { 1334 OpInfo.addField(Base, Width, Offset); 1335 Base = ~0U; 1336 Width = 0; 1337 Offset = 0; 1338 } 1339 continue; 1340 } 1341 1342 if (Var->getName() != NI->second && 1343 Var->getName() != TiedNames[NI->second]) { 1344 if (Base != ~0U) { 1345 OpInfo.addField(Base, Width, Offset); 1346 Base = ~0U; 1347 Width = 0; 1348 Offset = 0; 1349 } 1350 continue; 1351 } 1352 1353 if (Base == ~0U) { 1354 Base = bi; 1355 Width = 1; 1356 Offset = BI ? BI->getBitNum() : 0; 1357 } else if (BI && BI->getBitNum() != Offset + Width) { 1358 OpInfo.addField(Base, Width, Offset); 1359 Base = bi; 1360 Width = 1; 1361 Offset = BI->getBitNum(); 1362 } else { 1363 ++Width; 1364 } 1365 } 1366 1367 if (Base != ~0U) 1368 OpInfo.addField(Base, Width, Offset); 1369 1370 if (OpInfo.numFields() > 0) 1371 InsnOperands.push_back(OpInfo); 1372 } 1373 1374 Operands[Opc] = InsnOperands; 1375 1376 1377 #if 0 1378 DEBUG({ 1379 // Dumps the instruction encoding bits. 1380 dumpBits(errs(), Bits); 1381 1382 errs() << '\n'; 1383 1384 // Dumps the list of operand info. 1385 for (unsigned i = 0, e = CGI.Operands.size(); i != e; ++i) { 1386 const CGIOperandList::OperandInfo &Info = CGI.Operands[i]; 1387 const std::string &OperandName = Info.Name; 1388 const Record &OperandDef = *Info.Rec; 1389 1390 errs() << "\t" << OperandName << " (" << OperandDef.getName() << ")\n"; 1391 } 1392 }); 1393 #endif 1394 1395 return true; 1396 } 1397 1398 static void emitHelper(llvm::raw_ostream &o, unsigned BitWidth) { 1399 unsigned Indentation = 0; 1400 std::string WidthStr = "uint" + utostr(BitWidth) + "_t"; 1401 1402 o << '\n'; 1403 1404 o.indent(Indentation) << "static " << WidthStr << 1405 " fieldFromInstruction" << BitWidth << 1406 "(" << WidthStr <<" insn, unsigned startBit, unsigned numBits)\n"; 1407 1408 o.indent(Indentation) << "{\n"; 1409 1410 ++Indentation; ++Indentation; 1411 o.indent(Indentation) << "assert(startBit + numBits <= " << BitWidth 1412 << " && \"Instruction field out of bounds!\");\n"; 1413 o << '\n'; 1414 o.indent(Indentation) << WidthStr << " fieldMask;\n"; 1415 o << '\n'; 1416 o.indent(Indentation) << "if (numBits == " << BitWidth << ")\n"; 1417 1418 ++Indentation; ++Indentation; 1419 o.indent(Indentation) << "fieldMask = (" << WidthStr << ")-1;\n"; 1420 --Indentation; --Indentation; 1421 1422 o.indent(Indentation) << "else\n"; 1423 1424 ++Indentation; ++Indentation; 1425 o.indent(Indentation) << "fieldMask = ((1 << numBits) - 1) << startBit;\n"; 1426 --Indentation; --Indentation; 1427 1428 o << '\n'; 1429 o.indent(Indentation) << "return (insn & fieldMask) >> startBit;\n"; 1430 --Indentation; --Indentation; 1431 1432 o.indent(Indentation) << "}\n"; 1433 1434 o << '\n'; 1435 } 1436 1437 // Emits disassembler code for instruction decoding. 1438 void FixedLenDecoderEmitter::run(raw_ostream &o) 1439 { 1440 o << "#include \"llvm/MC/MCInst.h\"\n"; 1441 o << "#include \"llvm/Support/DataTypes.h\"\n"; 1442 o << "#include <assert.h>\n"; 1443 o << '\n'; 1444 o << "namespace llvm {\n\n"; 1445 1446 // Parameterize the decoders based on namespace and instruction width. 1447 NumberedInstructions = Target.getInstructionsByEnumValue(); 1448 std::map<std::pair<std::string, unsigned>, 1449 std::vector<unsigned> > OpcMap; 1450 std::map<unsigned, std::vector<OperandInfo> > Operands; 1451 1452 for (unsigned i = 0; i < NumberedInstructions.size(); ++i) { 1453 const CodeGenInstruction *Inst = NumberedInstructions[i]; 1454 Record *Def = Inst->TheDef; 1455 unsigned Size = Def->getValueAsInt("Size"); 1456 if (Def->getValueAsString("Namespace") == "TargetOpcode" || 1457 Def->getValueAsBit("isPseudo") || 1458 Def->getValueAsBit("isAsmParserOnly") || 1459 Def->getValueAsBit("isCodeGenOnly")) 1460 continue; 1461 1462 std::string DecoderNamespace = Def->getValueAsString("DecoderNamespace"); 1463 1464 if (Size) { 1465 if (populateInstruction(*Inst, i, Operands)) { 1466 OpcMap[std::make_pair(DecoderNamespace, Size)].push_back(i); 1467 } 1468 } 1469 } 1470 1471 std::set<unsigned> Sizes; 1472 for (std::map<std::pair<std::string, unsigned>, 1473 std::vector<unsigned> >::iterator 1474 I = OpcMap.begin(), E = OpcMap.end(); I != E; ++I) { 1475 // If we haven't visited this instruction width before, emit the 1476 // helper method to extract fields. 1477 if (!Sizes.count(I->first.second)) { 1478 emitHelper(o, 8*I->first.second); 1479 Sizes.insert(I->first.second); 1480 } 1481 1482 // Emit the decoder for this namespace+width combination. 1483 FilterChooser FC(NumberedInstructions, I->second, Operands, 1484 8*I->first.second, this); 1485 FC.emitTop(o, 0, I->first.first); 1486 } 1487 1488 o << "\n} // End llvm namespace \n"; 1489 } 1490