mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-19 14:19:31 +02:00
+ function-level LLVM inline assembly decorator
git-svn-id: trunk@34855 -
This commit is contained in:
parent
646385e966
commit
af297e849c
@ -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 }
|
||||
{****************************************************************************}
|
||||
|
Loading…
Reference in New Issue
Block a user