[llvm-commits] [llvm] r124379 - in /llvm/trunk: lib/MC/MCParser/AsmParser.cpp test/MC/ELF/cfi-offset.s
Roman Divacky
rdivacky at freebsd.org
Thu Jan 27 09:16:37 PST 2011
Author: rdivacky
Date: Thu Jan 27 11:16:37 2011
New Revision: 124379
URL: http://llvm.org/viewvc/llvm-project?rev=124379&view=rev
Log:
Add support for specifying register name in cfi-register/offset/def
as well as register number.
Modified:
llvm/trunk/lib/MC/MCParser/AsmParser.cpp
llvm/trunk/test/MC/ELF/cfi-offset.s
Modified: llvm/trunk/lib/MC/MCParser/AsmParser.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCParser/AsmParser.cpp?rev=124379&r1=124378&r2=124379&view=diff
==============================================================================
--- llvm/trunk/lib/MC/MCParser/AsmParser.cpp (original)
+++ llvm/trunk/lib/MC/MCParser/AsmParser.cpp Thu Jan 27 11:16:37 2011
@@ -30,6 +30,7 @@
#include "llvm/Support/MemoryBuffer.h"
#include "llvm/Support/SourceMgr.h"
#include "llvm/Support/raw_ostream.h"
+#include "llvm/Target/TargetAsmInfo.h"
#include "llvm/Target/TargetAsmParser.h"
#include <cctype>
#include <vector>
@@ -274,6 +275,8 @@
AddDirectiveHandler<&GenericAsmParser::ParseDirectiveLEB128>(".uleb128");
}
+ bool ParseRegisterOrRegisterNumber(int64_t &Register, SMLoc DirectiveLoc);
+
bool ParseDirectiveFile(StringRef, SMLoc DirectiveLoc);
bool ParseDirectiveLine(StringRef, SMLoc DirectiveLoc);
bool ParseDirectiveLoc(StringRef, SMLoc DirectiveLoc);
@@ -2181,12 +2184,28 @@
return getStreamer().EmitCFIEndProc();
}
+/// ParseRegisterOrRegisterNumber - parse register name or number.
+bool GenericAsmParser::ParseRegisterOrRegisterNumber(int64_t &Register,
+ SMLoc DirectiveLoc) {
+ unsigned RegNo;
+
+ if (getLexer().is(AsmToken::Percent)) {
+ if (getParser().getTargetParser().ParseRegister(RegNo, DirectiveLoc,
+ DirectiveLoc))
+ return true;
+ Register = getContext().getTargetAsmInfo().getDwarfRegNum(RegNo, true);
+ } else
+ return getParser().ParseAbsoluteExpression(Register);
+
+ return false;
+}
+
/// ParseDirectiveCFIDefCfa
/// ::= .cfi_def_cfa register, offset
bool GenericAsmParser::ParseDirectiveCFIDefCfa(StringRef,
SMLoc DirectiveLoc) {
int64_t Register = 0;
- if (getParser().ParseAbsoluteExpression(Register))
+ if (ParseRegisterOrRegisterNumber(Register, DirectiveLoc))
return true;
if (getLexer().isNot(AsmToken::Comma))
@@ -2216,7 +2235,7 @@
bool GenericAsmParser::ParseDirectiveCFIDefCfaRegister(StringRef,
SMLoc DirectiveLoc) {
int64_t Register = 0;
- if (getParser().ParseAbsoluteExpression(Register))
+ if (ParseRegisterOrRegisterNumber(Register, DirectiveLoc))
return true;
return getStreamer().EmitCFIDefCfaRegister(Register);
@@ -2227,7 +2246,8 @@
bool GenericAsmParser::ParseDirectiveCFIOffset(StringRef, SMLoc DirectiveLoc) {
int64_t Register = 0;
int64_t Offset = 0;
- if (getParser().ParseAbsoluteExpression(Register))
+
+ if (ParseRegisterOrRegisterNumber(Register, DirectiveLoc))
return true;
if (getLexer().isNot(AsmToken::Comma))
Modified: llvm/trunk/test/MC/ELF/cfi-offset.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ELF/cfi-offset.s?rev=124379&r1=124378&r2=124379&view=diff
==============================================================================
--- llvm/trunk/test/MC/ELF/cfi-offset.s (original)
+++ llvm/trunk/test/MC/ELF/cfi-offset.s Thu Jan 27 11:16:37 2011
@@ -3,7 +3,7 @@
f:
.cfi_startproc
nop
- .cfi_offset 6, -16
+ .cfi_offset %ebp, -16
nop
.cfi_endproc
More information about the llvm-commits
mailing list