ソースを参照

+ top_asmlist operand type for LLVM inline assembly "call" instructions

git-svn-id: trunk@34889 -
Jonas Maebe 8 年 前
コミット
d2873e433e
2 ファイル変更17 行追加0 行削除
  1. 2 0
      compiler/aasmtai.pas
  2. 15 0
      compiler/llvm/aasmllvm.pas

+ 2 - 0
compiler/aasmtai.pas

@@ -259,6 +259,7 @@ interface
        ,top_fpcond
        ,top_cond
        ,top_para
+       ,top_asmlist
 {$endif llvm}
        );
 
@@ -449,6 +450,7 @@ interface
             top_cond   : (cond: topcmp);
             top_fpcond : (fpcond: tllvmfpcmp);
             top_para   : (paras: tfplist);
+            top_asmlist : (asmlist: tasmlist);
         {$endif llvm}
         end;
         poper=^toper;

+ 15 - 0
compiler/llvm/aasmllvm.pas

@@ -124,6 +124,7 @@ interface
         procedure loadcond(opidx: longint; _cond: topcmp);
         procedure loadfpcond(opidx: longint; _fpcond: tllvmfpcmp);
         procedure loadparas(opidx: longint; _paras: tfplist);
+        procedure loadasmlist(opidx: longint; _asmlist: tasmlist);
 
         { register spilling code }
         function spilling_get_operation_type(opnr: longint): topertype;override;
@@ -320,6 +321,8 @@ uses
             end;
           top_tai:
             oper[opidx]^.ai.free;
+          top_asmlist:
+            oper[opidx]^.asmlist.free;
         end;
         inherited;
       end;
@@ -446,6 +449,18 @@ uses
       end;
 
 
+    procedure taillvm.loadasmlist(opidx: longint; _asmlist: tasmlist);
+      begin
+        allocate_oper(opidx+1);
+        with oper[opidx]^ do
+         begin
+           clearop(opidx);
+           asmlist:=_asmlist;
+           typ:=top_asmlist;
+         end;
+      end;
+
+
     function taillvm.spilling_get_operation_type(opnr: longint): topertype;
       begin
         case llvmopcode of