mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-08 19:25:47 +00:00
[ms-inline asm] Add support for parsing [Intel dialect] memory operands that use
segmented registers. Test case to come. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@165275 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -53,7 +53,7 @@ private:
|
|||||||
X86Operand *ParseOperand();
|
X86Operand *ParseOperand();
|
||||||
X86Operand *ParseATTOperand();
|
X86Operand *ParseATTOperand();
|
||||||
X86Operand *ParseIntelOperand();
|
X86Operand *ParseIntelOperand();
|
||||||
X86Operand *ParseIntelMemOperand();
|
X86Operand *ParseIntelMemOperand(unsigned SegReg, SMLoc StartLoc);
|
||||||
X86Operand *ParseIntelBracExpression(unsigned SegReg, unsigned Size);
|
X86Operand *ParseIntelBracExpression(unsigned SegReg, unsigned Size);
|
||||||
X86Operand *ParseMemOperand(unsigned SegReg, SMLoc StartLoc);
|
X86Operand *ParseMemOperand(unsigned SegReg, SMLoc StartLoc);
|
||||||
|
|
||||||
@@ -729,10 +729,9 @@ X86Operand *X86AsmParser::ParseIntelBracExpression(unsigned SegReg,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// ParseIntelMemOperand - Parse intel style memory operand.
|
/// ParseIntelMemOperand - Parse intel style memory operand.
|
||||||
X86Operand *X86AsmParser::ParseIntelMemOperand() {
|
X86Operand *X86AsmParser::ParseIntelMemOperand(unsigned SegReg, SMLoc Start) {
|
||||||
const AsmToken &Tok = Parser.getTok();
|
const AsmToken &Tok = Parser.getTok();
|
||||||
SMLoc Start = Parser.getTok().getLoc(), End;
|
SMLoc End;
|
||||||
unsigned SegReg = 0;
|
|
||||||
|
|
||||||
unsigned Size = getIntelMemOperandSize(Tok.getString());
|
unsigned Size = getIntelMemOperandSize(Tok.getString());
|
||||||
if (Size) {
|
if (Size) {
|
||||||
@@ -776,12 +775,17 @@ X86Operand *X86AsmParser::ParseIntelOperand() {
|
|||||||
// register
|
// register
|
||||||
unsigned RegNo = 0;
|
unsigned RegNo = 0;
|
||||||
if (!ParseRegister(RegNo, Start, End)) {
|
if (!ParseRegister(RegNo, Start, End)) {
|
||||||
End = Parser.getTok().getLoc();
|
// If this is a segment register followed by a ':', then this is the start
|
||||||
return X86Operand::CreateReg(RegNo, Start, End);
|
// of a memory reference, otherwise this is a normal register reference.
|
||||||
|
if (getLexer().isNot(AsmToken::Colon))
|
||||||
|
return X86Operand::CreateReg(RegNo, Start, Parser.getTok().getLoc());
|
||||||
|
|
||||||
|
getParser().Lex(); // Eat the colon.
|
||||||
|
return ParseIntelMemOperand(RegNo, Start);
|
||||||
}
|
}
|
||||||
|
|
||||||
// mem operand
|
// mem operand
|
||||||
return ParseIntelMemOperand();
|
return ParseIntelMemOperand(0, Start);
|
||||||
}
|
}
|
||||||
|
|
||||||
X86Operand *X86AsmParser::ParseATTOperand() {
|
X86Operand *X86AsmParser::ParseATTOperand() {
|
||||||
|
Reference in New Issue
Block a user