File: FixedLenDecoderEmitter.h

package info (click to toggle)
llvm-2.9 2.9%2Bdfsg-7
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 69,236 kB
  • sloc: cpp: 439,289; ansic: 16,211; asm: 13,295; sh: 12,912; python: 4,459; ml: 4,274; perl: 2,093; makefile: 1,808; pascal: 1,481; exp: 427; objc: 334; xml: 283; ada: 235; lisp: 187; csh: 117; f90: 36
file content (56 lines) | stat: -rw-r--r-- 1,548 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
//===------------ FixedLenDecoderEmitter.h - Decoder Generator --*- C++ -*-===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// It contains the tablegen backend that emits the decoder functions for
// targets with fixed length instruction set.
//
//===----------------------------------------------------------------------===//

#ifndef FixedLenDECODEREMITTER_H
#define FixedLenDECODEREMITTER_H

#include "CodeGenTarget.h"
#include "TableGenBackend.h"

#include "llvm/Support/DataTypes.h"

namespace llvm {

struct OperandInfo {
  unsigned FieldBase;
  unsigned FieldLength;
  std::string Decoder;

  OperandInfo(unsigned FB, unsigned FL, std::string D)
    : FieldBase(FB), FieldLength(FL), Decoder(D) { }
};

class FixedLenDecoderEmitter : public TableGenBackend {
public:
  FixedLenDecoderEmitter(RecordKeeper &R) :
    Records(R), Target(R),
    NumberedInstructions(Target.getInstructionsByEnumValue()) {}

  // run - Output the code emitter
  void run(raw_ostream &o);

private:
  RecordKeeper &Records;
  CodeGenTarget Target;
  std::vector<const CodeGenInstruction*> NumberedInstructions;
  std::vector<unsigned> Opcodes;
  std::map<unsigned, std::vector<OperandInfo> > Operands;

  bool populateInstruction(const CodeGenInstruction &CGI, unsigned Opc);
  void populateInstructions();
};

} // end llvm namespace

#endif