aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2010-01-15 19:06:59 +0000
committerChris Lattner <sabre@nondot.org>2010-01-15 19:06:59 +0000
commit1f19f0f31dace5d145fecbe1f0f3fea4fb9ae813 (patch)
tree4d94fe9d3101b7dd78cc65fe0e1485cd8f2efd3d /lib
parent3a32865d58f015e7058444eab7085195c34da95a (diff)
downloadexternal_llvm-1f19f0f31dace5d145fecbe1f0f3fea4fb9ae813.zip
external_llvm-1f19f0f31dace5d145fecbe1f0f3fea4fb9ae813.tar.gz
external_llvm-1f19f0f31dace5d145fecbe1f0f3fea4fb9ae813.tar.bz2
give X86Operand a ctor and start passing SMLoc's into it.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@93532 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r--lib/Target/X86/AsmParser/X86AsmParser.cpp24
1 files changed, 13 insertions, 11 deletions
diff --git a/lib/Target/X86/AsmParser/X86AsmParser.cpp b/lib/Target/X86/AsmParser/X86AsmParser.cpp
index dcf4f83..8ccfc8f 100644
--- a/lib/Target/X86/AsmParser/X86AsmParser.cpp
+++ b/lib/Target/X86/AsmParser/X86AsmParser.cpp
@@ -74,7 +74,7 @@ namespace {
/// X86Operand - Instances of this class represent a parsed X86 machine
/// instruction.
struct X86Operand : public MCParsedAsmOperand {
- enum {
+ enum KindTy {
Token,
Register,
Immediate,
@@ -106,6 +106,14 @@ struct X86Operand : public MCParsedAsmOperand {
} Mem;
};
+ X86Operand(KindTy K, SMLoc Start = SMLoc(), SMLoc End = SMLoc())
+ : Kind(K), StartLoc(Start), EndLoc(End) {}
+
+ /// getStartLoc - Get the location of the first token of this operand.
+ SMLoc getStartLoc() const { return StartLoc; }
+ /// getEndLoc - Get the location of the last token of this operand.
+ SMLoc getEndLoc() const { return EndLoc; }
+
StringRef getToken() const {
assert(Kind == Token && "Invalid access!");
return StringRef(Tok.Data, Tok.Length);
@@ -194,25 +202,20 @@ struct X86Operand : public MCParsedAsmOperand {
}
static X86Operand *CreateToken(StringRef Str) {
- X86Operand *Res = new X86Operand();
- Res->Kind = Token;
+ X86Operand *Res = new X86Operand(Token);
Res->Tok.Data = Str.data();
Res->Tok.Length = Str.size();
return Res;
}
static X86Operand *CreateReg(unsigned RegNo, SMLoc StartLoc, SMLoc EndLoc) {
- X86Operand *Res = new X86Operand();
- Res->Kind = Register;
+ X86Operand *Res = new X86Operand(Register, StartLoc, EndLoc);
Res->Reg.RegNo = RegNo;
- Res->StartLoc = StartLoc;
- Res->EndLoc = EndLoc;
return Res;
}
static X86Operand *CreateImm(const MCExpr *Val) {
- X86Operand *Res = new X86Operand();
- Res->Kind = Immediate;
+ X86Operand *Res = new X86Operand(Immediate);
Res->Imm.Val = Val;
return Res;
}
@@ -226,8 +229,7 @@ struct X86Operand : public MCParsedAsmOperand {
// The scale should always be one of {1,2,4,8}.
assert(((Scale == 1 || Scale == 2 || Scale == 4 || Scale == 8)) &&
"Invalid scale!");
- X86Operand *Res = new X86Operand();
- Res->Kind = Memory;
+ X86Operand *Res = new X86Operand(Memory);
Res->Mem.SegReg = SegReg;
Res->Mem.Disp = Disp;
Res->Mem.BaseReg = BaseReg;