Răsfoiți Sursa

+ function-level LLVM inline assembly decorator

git-svn-id: trunk@34855 -
Jonas Maebe 8 ani în urmă
părinte
comite
af297e849c
1 a modificat fișierele cu 54 adăugiri și 17 ștergeri
  1. 54 17
      compiler/llvm/agllvm.pas

+ 54 - 17
compiler/llvm/agllvm.pas

@@ -33,10 +33,19 @@ interface
     type
     type
       TLLVMInstrWriter = class;
       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 LinePrefix: AnsiString;
        function LinePostfix: AnsiString;
        function LinePostfix: AnsiString;
-       function LineFilter(const s: AnsiString): AnsiString;
        function LineEnding(const deflineending: ShortString): ShortString;
        function LineEnding(const deflineending: ShortString): ShortString;
       end;
       end;
 
 
@@ -138,24 +147,11 @@ implementation
          extended2str:=hs
          extended2str:=hs
       end;
       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
       var
         i: longint;
         i: longint;
       begin
       begin
@@ -174,6 +170,22 @@ implementation
               result:=result+s[i];
               result:=result+s[i];
             end;
             end;
           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;
       end;
 
 
 
 
@@ -183,6 +195,31 @@ implementation
       end;
       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                             }
  {                        LLVM Instruction writer                             }
  {****************************************************************************}
  {****************************************************************************}