mirror of
https://github.com/RPCSX/llvm.git
synced 2025-02-27 08:26:23 +00:00
ARM support the .arm and .thumb directives for assembly mode switching.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@146042 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
465becf481
commit
9a70df99ca
@ -92,6 +92,7 @@ class ARMAsmParser : public MCTargetAsmParser {
|
||||
unsigned &ShiftAmount);
|
||||
bool parseDirectiveWord(unsigned Size, SMLoc L);
|
||||
bool parseDirectiveThumb(SMLoc L);
|
||||
bool parseDirectiveARM(SMLoc L);
|
||||
bool parseDirectiveThumbFunc(SMLoc L);
|
||||
bool parseDirectiveCode(SMLoc L);
|
||||
bool parseDirectiveSyntax(SMLoc L);
|
||||
@ -5622,6 +5623,8 @@ bool ARMAsmParser::ParseDirective(AsmToken DirectiveID) {
|
||||
return parseDirectiveWord(4, DirectiveID.getLoc());
|
||||
else if (IDVal == ".thumb")
|
||||
return parseDirectiveThumb(DirectiveID.getLoc());
|
||||
else if (IDVal == ".arm")
|
||||
return parseDirectiveARM(DirectiveID.getLoc());
|
||||
else if (IDVal == ".thumb_func")
|
||||
return parseDirectiveThumbFunc(DirectiveID.getLoc());
|
||||
else if (IDVal == ".code")
|
||||
@ -5663,9 +5666,22 @@ bool ARMAsmParser::parseDirectiveThumb(SMLoc L) {
|
||||
return Error(L, "unexpected token in directive");
|
||||
Parser.Lex();
|
||||
|
||||
// TODO: set thumb mode
|
||||
// TODO: tell the MC streamer the mode
|
||||
// getParser().getStreamer().Emit???();
|
||||
if (!isThumb())
|
||||
SwitchMode();
|
||||
getParser().getStreamer().EmitAssemblerFlag(MCAF_Code16);
|
||||
return false;
|
||||
}
|
||||
|
||||
/// parseDirectiveARM
|
||||
/// ::= .arm
|
||||
bool ARMAsmParser::parseDirectiveARM(SMLoc L) {
|
||||
if (getLexer().isNot(AsmToken::EndOfStatement))
|
||||
return Error(L, "unexpected token in directive");
|
||||
Parser.Lex();
|
||||
|
||||
if (isThumb())
|
||||
SwitchMode();
|
||||
getParser().getStreamer().EmitAssemblerFlag(MCAF_Code32);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -13,3 +13,14 @@
|
||||
.code 16
|
||||
adds r0, r0, r1
|
||||
@ CHECK: adds r0, r0, r1 @ encoding: [0x40,0x18]
|
||||
|
||||
.arm
|
||||
add r0, r0, r1
|
||||
@ CHECK: add r0, r0, r1 @ encoding: [0x01,0x00,0x80,0xe0]
|
||||
|
||||
.thumb
|
||||
add.w r0, r0, r1
|
||||
adds r0, r0, r1
|
||||
|
||||
@ CHECK: add.w r0, r0, r1 @ encoding: [0x00,0xeb,0x01,0x00]
|
||||
@ CHECK: adds r0, r0, r1 @ encoding: [0x40,0x18]
|
||||
|
Loading…
x
Reference in New Issue
Block a user