mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-15 07:34:33 +00:00
ARM IAS: support .short and .hword
This adds support for the .short and its alias .hword for adding literal values into the object file. This is similar to the .word directive, however, rather than inserting a value of 4 bytes, adds a 2-byte value. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@201968 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
ea06d9762c
commit
be66089390
@ -199,7 +199,7 @@ class ARMAsmParser : public MCTargetAsmParser {
|
|||||||
bool parsePrefix(ARMMCExpr::VariantKind &RefKind);
|
bool parsePrefix(ARMMCExpr::VariantKind &RefKind);
|
||||||
bool parseMemRegOffsetShift(ARM_AM::ShiftOpc &ShiftType,
|
bool parseMemRegOffsetShift(ARM_AM::ShiftOpc &ShiftType,
|
||||||
unsigned &ShiftAmount);
|
unsigned &ShiftAmount);
|
||||||
bool parseDirectiveWord(unsigned Size, SMLoc L);
|
bool parseLiteralValues(unsigned Size, SMLoc L);
|
||||||
bool parseDirectiveThumb(SMLoc L);
|
bool parseDirectiveThumb(SMLoc L);
|
||||||
bool parseDirectiveARM(SMLoc L);
|
bool parseDirectiveARM(SMLoc L);
|
||||||
bool parseDirectiveThumbFunc(SMLoc L);
|
bool parseDirectiveThumbFunc(SMLoc L);
|
||||||
@ -7959,7 +7959,9 @@ MatchAndEmitInstruction(SMLoc IDLoc, unsigned &Opcode,
|
|||||||
bool ARMAsmParser::ParseDirective(AsmToken DirectiveID) {
|
bool ARMAsmParser::ParseDirective(AsmToken DirectiveID) {
|
||||||
StringRef IDVal = DirectiveID.getIdentifier();
|
StringRef IDVal = DirectiveID.getIdentifier();
|
||||||
if (IDVal == ".word")
|
if (IDVal == ".word")
|
||||||
return parseDirectiveWord(4, DirectiveID.getLoc());
|
return parseLiteralValues(4, DirectiveID.getLoc());
|
||||||
|
else if (IDVal == ".short" || IDVal == ".hword")
|
||||||
|
return parseLiteralValues(2, DirectiveID.getLoc());
|
||||||
else if (IDVal == ".thumb")
|
else if (IDVal == ".thumb")
|
||||||
return parseDirectiveThumb(DirectiveID.getLoc());
|
return parseDirectiveThumb(DirectiveID.getLoc());
|
||||||
else if (IDVal == ".arm")
|
else if (IDVal == ".arm")
|
||||||
@ -8023,9 +8025,11 @@ bool ARMAsmParser::ParseDirective(AsmToken DirectiveID) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// parseDirectiveWord
|
/// parseLiteralValues
|
||||||
/// ::= .word [ expression (, expression)* ]
|
/// ::= .hword expression [, expression]*
|
||||||
bool ARMAsmParser::parseDirectiveWord(unsigned Size, SMLoc L) {
|
/// ::= .short expression [, expression]*
|
||||||
|
/// ::= .word expression [, expression]*
|
||||||
|
bool ARMAsmParser::parseLiteralValues(unsigned Size, SMLoc L) {
|
||||||
if (getLexer().isNot(AsmToken::EndOfStatement)) {
|
if (getLexer().isNot(AsmToken::EndOfStatement)) {
|
||||||
for (;;) {
|
for (;;) {
|
||||||
const MCExpr *Value;
|
const MCExpr *Value;
|
||||||
|
@ -1,6 +0,0 @@
|
|||||||
@ RUN: llvm-mc -mcpu=cortex-a8 -triple arm-unknown-unknown %s | FileCheck %s
|
|
||||||
|
|
||||||
@ CHECK: TEST0:
|
|
||||||
@ CHECK: .long 3
|
|
||||||
TEST0:
|
|
||||||
.word 3
|
|
26
test/MC/ARM/directive-literals.s
Normal file
26
test/MC/ARM/directive-literals.s
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
@ RUN: llvm-mc -triple arm %s | FileCheck %s
|
||||||
|
|
||||||
|
.data
|
||||||
|
|
||||||
|
short:
|
||||||
|
.short 0
|
||||||
|
.short 0xdefe
|
||||||
|
|
||||||
|
@ CHECK-LABEL: short
|
||||||
|
@ CHECK-NEXT: .short 0
|
||||||
|
@ CHECK-NEXT: .short 57086
|
||||||
|
|
||||||
|
hword:
|
||||||
|
.hword 0
|
||||||
|
.hword 0xdefe
|
||||||
|
|
||||||
|
@ CHECK-LABEL: hword
|
||||||
|
@ CHECK-NEXT: .short 0
|
||||||
|
@ CHECK-NEXT: .short 57086
|
||||||
|
|
||||||
|
word:
|
||||||
|
.word 3
|
||||||
|
|
||||||
|
@ CHECK-LABEL: word
|
||||||
|
@ CHECK-NEXT: .long 3
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user