|
@@ -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 }
|
|
|
{****************************************************************************}
|