summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/Target/X86/X86.td6
-rw-r--r--lib/Target/X86/X86InstrFormats.td9
-rw-r--r--lib/Target/X86/X86InstrInfo.td2
-rw-r--r--utils/TableGen/InstrInfoEmitter.cpp2
-rw-r--r--utils/TableGen/Record.cpp10
-rw-r--r--utils/TableGen/Record.h3
6 files changed, 21 insertions, 11 deletions
diff --git a/lib/Target/X86/X86.td b/lib/Target/X86/X86.td
index 5788e2a71f..b0847a8543 100644
--- a/lib/Target/X86/X86.td
+++ b/lib/Target/X86/X86.td
@@ -160,11 +160,11 @@ def X86InstrInfo : InstrInfo {
"hasAdSizePrefix",
"Prefix",
"hasREX_WPrefix",
- "ImmTypeBits",
- "FPFormBits",
+ "ImmT.Value",
+ "FPForm.Value",
"hasLockPrefix",
"SegOvrBits",
- "DomainBits",
+ "ExeDomain.Value",
"Opcode"];
let TSFlagsShifts = [0,
6,
diff --git a/lib/Target/X86/X86InstrFormats.td b/lib/Target/X86/X86InstrFormats.td
index a811638c39..31dc5956e8 100644
--- a/lib/Target/X86/X86InstrFormats.td
+++ b/lib/Target/X86/X86InstrFormats.td
@@ -111,7 +111,6 @@ class X86Inst<bits<8> opcod, Format f, ImmType i, dag outs, dag ins,
Format Form = f;
bits<6> FormBits = Form.Value;
ImmType ImmT = i;
- bits<3> ImmTypeBits = ImmT.Value;
dag OutOperandList = outs;
dag InOperandList = ins;
@@ -125,12 +124,10 @@ class X86Inst<bits<8> opcod, Format f, ImmType i, dag outs, dag ins,
bits<4> Prefix = 0; // Which prefix byte does this inst have?
bit hasREX_WPrefix = 0; // Does this inst requires the REX.W prefix?
- FPFormat FPForm; // What flavor of FP instruction is this?
- bits<3> FPFormBits = 0;
+ FPFormat FPForm = NotFP; // What flavor of FP instruction is this?
bit hasLockPrefix = 0; // Does this inst have a 0xF0 prefix?
bits<2> SegOvrBits = 0; // Segment override prefix.
- Domain Dom = d;
- bits<2> DomainBits = Dom.Value;
+ Domain ExeDomain = d;
}
class I<bits<8> o, Format f, dag outs, dag ins, string asm,
@@ -179,7 +176,7 @@ class FPI<bits<8> o, Format F, dag outs, dag ins, string asm>
// FpI_ - Floating Point Psuedo Instruction template. Not Predicated.
class FpI_<dag outs, dag ins, FPFormat fp, list<dag> pattern>
: X86Inst<0, Pseudo, NoImm, outs, ins, ""> {
- let FPForm = fp; let FPFormBits = FPForm.Value;
+ let FPForm = fp;
let Pattern = pattern;
}
diff --git a/lib/Target/X86/X86InstrInfo.td b/lib/Target/X86/X86InstrInfo.td
index 67d935a669..a029a24f8b 100644
--- a/lib/Target/X86/X86InstrInfo.td
+++ b/lib/Target/X86/X86InstrInfo.td
@@ -587,7 +587,7 @@ let neverHasSideEffects = 1, isNotDuplicable = 1, Uses = [ESP] in
// Return instructions.
let isTerminator = 1, isReturn = 1, isBarrier = 1,
- hasCtrlDep = 1, FPForm = SpecialFP, FPFormBits = SpecialFP.Value in {
+ hasCtrlDep = 1, FPForm = SpecialFP in {
def RET : I <0xC3, RawFrm, (outs), (ins variable_ops),
"ret",
[(X86retflag 0)]>;
diff --git a/utils/TableGen/InstrInfoEmitter.cpp b/utils/TableGen/InstrInfoEmitter.cpp
index 8f7550b848..9bc545928d 100644
--- a/utils/TableGen/InstrInfoEmitter.cpp
+++ b/utils/TableGen/InstrInfoEmitter.cpp
@@ -337,7 +337,7 @@ void InstrInfoEmitter::emitShiftedValue(Record *R, StringInit *Val,
IntInit *ShiftInt, raw_ostream &OS) {
if (Val == 0 || ShiftInt == 0)
throw std::string("Illegal value or shift amount in TargetInfo*!");
- RecordVal *RV = R->getValue(Val->getValue());
+ RecordVal *RV = R->getDottedValue(Val->getValue());
int Shift = ShiftInt->getValue();
if (RV == 0 || RV->getValue() == 0) {
diff --git a/utils/TableGen/Record.cpp b/utils/TableGen/Record.cpp
index 0e3593b6a1..55c998926c 100644
--- a/utils/TableGen/Record.cpp
+++ b/utils/TableGen/Record.cpp
@@ -1307,6 +1307,16 @@ void Record::resolveReferencesTo(const RecordVal *RV) {
}
}
+RecordVal *Record::getDottedValue(StringRef Name) {
+ size_t pos = Name.find('.');
+ if (pos == StringRef::npos)
+ return getValue(Name);
+ RecordVal *RV = getValue(Name.substr(0, pos));
+ if (!RV) return 0;
+ DefInit *DI = dynamic_cast<DefInit*>(RV->getValue());
+ if (!DI) return 0;
+ return DI->getDef()->getDottedValue(Name.substr(pos+1));
+}
void Record::dump() const { errs() << *this; }
diff --git a/utils/TableGen/Record.h b/utils/TableGen/Record.h
index 55c1a80f9b..41373c799a 100644
--- a/utils/TableGen/Record.h
+++ b/utils/TableGen/Record.h
@@ -1262,6 +1262,9 @@ public:
return 0;
}
+ // Like getValue, but allow dotting into members: X.Y
+ RecordVal *getDottedValue(StringRef Name);
+
void addTemplateArg(StringRef Name) {
assert(!isTemplateArg(Name) && "Template arg already defined!");
TemplateArgs.push_back(Name);