mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-13 09:33:50 +00:00
ARM IAS: support .align without parameters
.align is handled specially on certain targets. .align without any parameters on ARM indicates a default alignment (4). Handle the special case in the target parser, but fall back to the generic parser for the normal version. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@201988 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
69f706d9e1
commit
ec1c80576d
@ -228,6 +228,7 @@ class ARMAsmParser : public MCTargetAsmParser {
|
||||
bool parseDirectiveMovSP(SMLoc L);
|
||||
bool parseDirectiveObjectArch(SMLoc L);
|
||||
bool parseDirectiveArchExtension(SMLoc L);
|
||||
bool parseDirectiveAlign(SMLoc L);
|
||||
|
||||
StringRef splitMnemonic(StringRef Mnemonic, unsigned &PredicationCode,
|
||||
bool &CarrySetting, unsigned &ProcessorIMod,
|
||||
@ -8022,6 +8023,8 @@ bool ARMAsmParser::ParseDirective(AsmToken DirectiveID) {
|
||||
return parseDirectiveObjectArch(DirectiveID.getLoc());
|
||||
else if (IDVal == ".arch_extension")
|
||||
return parseDirectiveArchExtension(DirectiveID.getLoc());
|
||||
else if (IDVal == ".align")
|
||||
return parseDirectiveAlign(DirectiveID.getLoc());
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -9061,6 +9064,23 @@ bool ARMAsmParser::parseDirectiveObjectArch(SMLoc L) {
|
||||
return false;
|
||||
}
|
||||
|
||||
/// parseDirectiveAlign
|
||||
/// ::= .align
|
||||
bool ARMAsmParser::parseDirectiveAlign(SMLoc L) {
|
||||
// NOTE: if this is not the end of the statement, fall back to the target
|
||||
// agnostic handling for this directive which will correctly handle this.
|
||||
if (getLexer().isNot(AsmToken::EndOfStatement))
|
||||
return true;
|
||||
|
||||
// '.align' is target specifically handled to mean 2**2 byte alignment.
|
||||
if (getStreamer().getCurrentSection().first->UseCodeAlign())
|
||||
getStreamer().EmitCodeAlignment(4, 0);
|
||||
else
|
||||
getStreamer().EmitValueToAlignment(4, 0, 1, 0);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/// Force static initialization.
|
||||
extern "C" void LLVMInitializeARMAsmParser() {
|
||||
RegisterMCAsmParser<ARMAsmParser> X(TheARMTarget);
|
||||
|
28
test/MC/ARM/directive-align.s
Normal file
28
test/MC/ARM/directive-align.s
Normal file
@ -0,0 +1,28 @@
|
||||
@ RUN: llvm-mc -triple armv7-eabi %s | FileCheck %s
|
||||
|
||||
.data
|
||||
|
||||
unaligned:
|
||||
.byte 1
|
||||
.align
|
||||
|
||||
@ CHECK-LABEL: unaligned
|
||||
@ CHECK-NEXT: .byte 1
|
||||
@ CHECK-NEXT: .align 2
|
||||
|
||||
aligned:
|
||||
.long 0x1d10c1e5
|
||||
.align
|
||||
|
||||
@ CHECK-LABEL: aligned
|
||||
@ CHECK-NEXT: .long 487637477
|
||||
@ CHECK-NEXT: .align 2
|
||||
|
||||
trailer:
|
||||
.long 0xd1ab011c
|
||||
.align 2
|
||||
|
||||
@ CHECK-LABEL: trailer
|
||||
@ CHECK-NEXT: .long 3517645084
|
||||
@ CHECK-NEXT: .align 2
|
||||
|
Loading…
x
Reference in New Issue
Block a user