Browse Source

* constructor to create extractvalue/extractelement instructions

git-svn-id: branches/debug_eh@40409 -
Jonas Maebe 6 years ago
parent
commit
366bf4294b
1 changed files with 14 additions and 0 deletions
  1. 14 0
      compiler/llvm/aasmllvm.pas

+ 14 - 0
compiler/llvm/aasmllvm.pas

@@ -120,6 +120,9 @@ interface
         { e.g. dst = invoke retsize reg (paras) to label <normal label> unwind label <exception label> }
         constructor invoke_size_reg_paras_retlab_exceptlab(callpd: tdef; dst: tregister; retsize: tdef; reg: tregister; paras: tfplist; retlab, exceptlab:TAsmLabel);
 
+        { e.g. dst := extractvalue srcsize src, 0 (note: no type for the index) }
+        constructor extract(op: tllvmop; dst: tregister; srcsize: tdef; src: tregister; idx: longint);
+
         { inline function-level assembler code and parameters }
         constructor asm_paras(asmlist: tasmlist; paras: tfplist);
 
@@ -1144,6 +1147,17 @@ uses
       end;
 
 
+    constructor taillvm.extract(op: tllvmop; dst: tregister; srcsize: tdef; src: tregister; idx: longint);
+      begin
+        create_llvm(op);
+        ops:=4;
+        loadreg(0,dst);
+        loaddef(1,srcsize);
+        loadreg(2,src);
+        loadconst(3,idx)
+      end;
+
+
     constructor taillvm.asm_paras(asmlist: tasmlist; paras: tfplist);
       begin
         create_llvm(la_asmblock);