mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-11-02 07:11:49 +00:00
MC: Parse .org directives.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@74218 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
208622db8a
commit
c238b584de
11
test/MC/AsmParser/directive_org.s
Normal file
11
test/MC/AsmParser/directive_org.s
Normal file
@ -0,0 +1,11 @@
|
||||
# RUN: llvm-mc %s > %t
|
||||
|
||||
# RUN: grep -A 2 TEST0 %t > %t2
|
||||
# RUN: grep ".org 1, 0" %t2 | count 1
|
||||
TEST0:
|
||||
.org 1
|
||||
|
||||
# RUN: grep -A 2 TEST1 %t > %t2
|
||||
# RUN: grep ".org 1, 3" %t2 | count 1
|
||||
TEST1:
|
||||
.org 1, 3
|
@ -324,6 +324,8 @@ bool AsmParser::ParseStatement() {
|
||||
return ParseDirectiveValue(8);
|
||||
if (!strcmp(IDVal, ".fill"))
|
||||
return ParseDirectiveFill();
|
||||
if (!strcmp(IDVal, ".org"))
|
||||
return ParseDirectiveOrg();
|
||||
if (!strcmp(IDVal, ".space"))
|
||||
return ParseDirectiveSpace();
|
||||
|
||||
@ -332,7 +334,6 @@ bool AsmParser::ParseStatement() {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
MCInst Inst;
|
||||
if (ParseX86InstOperands(Inst))
|
||||
return true;
|
||||
@ -558,3 +559,31 @@ bool AsmParser::ParseDirectiveFill() {
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/// ParseDirectiveOrg
|
||||
/// ::= .org expression [ , expression ]
|
||||
bool AsmParser::ParseDirectiveOrg() {
|
||||
int64_t Offset;
|
||||
if (ParseExpression(Offset))
|
||||
return true;
|
||||
|
||||
// Parse optional fill expression.
|
||||
int64_t FillExpr = 0;
|
||||
if (Lexer.isNot(asmtok::EndOfStatement)) {
|
||||
if (Lexer.isNot(asmtok::Comma))
|
||||
return TokError("unexpected token in '.org' directive");
|
||||
Lexer.Lex();
|
||||
|
||||
if (ParseExpression(FillExpr))
|
||||
return true;
|
||||
|
||||
if (Lexer.isNot(asmtok::EndOfStatement))
|
||||
return TokError("unexpected token in '.org' directive");
|
||||
}
|
||||
|
||||
Lexer.Lex();
|
||||
|
||||
Out.EmitValueToOffset(MCValue::get(Offset), FillExpr);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
@ -63,6 +63,7 @@ private:
|
||||
bool ParseDirectiveFill(); // ".fill"
|
||||
bool ParseDirectiveSpace(); // ".space"
|
||||
bool ParseDirectiveSet(); // ".set"
|
||||
bool ParseDirectiveOrg(); // ".org"
|
||||
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user