+ function-level LLVM inline assembly decorator

git-svn-id: trunk@34855 -
This commit is contained in:
Jonas Maebe 2016-11-09 19:51:30 +00:00
parent 646385e966
commit af297e849c

View File

@ -33,10 +33,19 @@ interface
type
TLLVMInstrWriter = class;
TLLVMModuleInlineAssemblyDecorator = class(TObject,IExternalAssemblerOutputFileDecorator)
TLLVMBaseInlineAssemblyDecorator = class
function LineFilter(const s: AnsiString): AnsiString;
end;
TLLVMModuleInlineAssemblyDecorator = class(TLLVMBaseInlineAssemblyDecorator,IExternalAssemblerOutputFileDecorator)
function LinePrefix: AnsiString;
function LinePostfix: AnsiString;
function LineEnding(const deflineending: ShortString): ShortString;
end;
TLLVMFunctionInlineAssemblyDecorator = class(TLLVMBaseInlineAssemblyDecorator,IExternalAssemblerOutputFileDecorator)
function LinePrefix: AnsiString;
function LinePostfix: AnsiString;
function LineFilter(const s: AnsiString): AnsiString;
function LineEnding(const deflineending: ShortString): ShortString;
end;
@ -138,24 +147,11 @@ implementation
extended2str:=hs
end;
{****************************************************************************}
{ Decorator for module-level inline assembly }
{ Common decorator functionality for inline assembly }
{****************************************************************************}
function TLLVMModuleInlineAssemblyDecorator.LinePrefix: AnsiString;
begin
result:='module asm "';
end;
function TLLVMModuleInlineAssemblyDecorator.LinePostfix: AnsiString;
begin
result:='"';
end;
function TLLVMModuleInlineAssemblyDecorator.LineFilter(const s: AnsiString): AnsiString;
function TLLVMBaseInlineAssemblyDecorator.LineFilter(const s: AnsiString): AnsiString;
var
i: longint;
begin
@ -174,6 +170,22 @@ implementation
result:=result+s[i];
end;
end;
end;
{****************************************************************************}
{ Decorator for module-level inline assembly }
{****************************************************************************}
function TLLVMModuleInlineAssemblyDecorator.LinePrefix: AnsiString;
begin
result:='module asm "';
end;
function TLLVMModuleInlineAssemblyDecorator.LinePostfix: AnsiString;
begin
result:='"';
end;
@ -183,6 +195,31 @@ implementation
end;
{****************************************************************************}
{ Decorator for function-level inline assembly }
{****************************************************************************}
function TLLVMFunctionInlineAssemblyDecorator.LinePrefix: AnsiString;
begin
result:='';
end;
function TLLVMFunctionInlineAssemblyDecorator.LinePostfix: AnsiString;
begin
result:='';
end;
function TLLVMFunctionInlineAssemblyDecorator.LineEnding(const deflineending: ShortString): ShortString;
begin
result:='\0A';
end;
{****************************************************************************}
{ LLVM Instruction writer }
{****************************************************************************}