1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-22 18:54:02 +01:00

Implement .seh_stackalloc and .seh_pushframe parsing.

I haven't implemented any of the ones that take registers yet. The problem is
that for x86-64 the streamer methods expect a native x86 register number (note:
%r8-%r15 want 8-15 instead of 0-7; same for %xmm8-%xmm15). I haven't figured
out exactly how I want to do that yet.

llvm-svn: 131899
This commit is contained in:
Charles Davis 2011-05-23 16:43:09 +00:00
parent c64a4d1170
commit b38506e3a7

View File

@ -256,8 +256,17 @@ bool COFFAsmParser::ParseSEHDirectiveSetFrame(StringRef, SMLoc L) {
return Error(L, "not implemented yet");
}
bool COFFAsmParser::ParseSEHDirectiveAllocStack(StringRef, SMLoc L) {
return Error(L, "not implemented yet");
bool COFFAsmParser::ParseSEHDirectiveAllocStack(StringRef, SMLoc) {
int64_t Size;
if (getParser().ParseAbsoluteExpression(Size))
return true;
if (getLexer().isNot(AsmToken::EndOfStatement))
return TokError("unexpected token in directive");
Lex();
getStreamer().EmitWin64EHAllocStack(Size);
return false;
}
bool COFFAsmParser::ParseSEHDirectiveSaveReg(StringRef, SMLoc L) {
@ -268,8 +277,22 @@ bool COFFAsmParser::ParseSEHDirectiveSaveXMM(StringRef, SMLoc L) {
return Error(L, "not implemented yet");
}
bool COFFAsmParser::ParseSEHDirectivePushFrame(StringRef, SMLoc L) {
return Error(L, "not implemented yet");
bool COFFAsmParser::ParseSEHDirectivePushFrame(StringRef, SMLoc) {
bool Code;
StringRef CodeID;
SMLoc startLoc = getLexer().getLoc();
if (!getParser().ParseIdentifier(CodeID)) {
if (CodeID != "@code")
return Error(startLoc, "expected @code");
Code = true;
}
if (getLexer().isNot(AsmToken::EndOfStatement))
return TokError("unexpected token in directive");
Lex();
getStreamer().EmitWin64EHPushFrame(Code);
return false;
}
bool COFFAsmParser::ParseSEHDirectiveEndProlog(StringRef, SMLoc) {