diff --git a/compiler/llvm/aasmllvm.pas b/compiler/llvm/aasmllvm.pas index 3576342a52..5a453876a8 100644 --- a/compiler/llvm/aasmllvm.pas +++ b/compiler/llvm/aasmllvm.pas @@ -111,6 +111,9 @@ interface { e.g. dst = call retsize reg (paras) } constructor call_size_reg_paras(callpd: tdef; dst: tregister;retsize: tdef;reg:tregister;paras: tfplist); + { inline function-level assembler code and parameters } + constructor asm_paras(asmlist: tasmlist; paras: tfplist); + procedure loadoper(opidx: longint; o: toper); override; procedure clearop(opidx: longint); override; procedure loadtai(opidx: longint; _ai: tai); @@ -1059,4 +1062,13 @@ uses loadparas(4,paras); end; + + constructor taillvm.asm_paras(asmlist: tasmlist; paras: tfplist); + begin + create_llvm(la_asmblock); + ops:=2; + loadasmlist(0,asmlist); + loadparas(1,paras); + end; + end. diff --git a/compiler/llvm/itllvm.pas b/compiler/llvm/itllvm.pas index 93143af201..abd1aabf25 100644 --- a/compiler/llvm/itllvm.pas +++ b/compiler/llvm/itllvm.pas @@ -61,7 +61,8 @@ interface { fpc pseudo opcodes } 'type', { type definition } 'invalid1', { la_x_to_inttoptr } - 'invalid2' { la_ptrtoint_to_x } + 'invalid2', { la_ptrtoint_to_x } + 'asm' { la_asmblock } ); llvm_cond2str : array[topcmp] of ansistring = ('', diff --git a/compiler/llvm/llvmbase.pas b/compiler/llvm/llvmbase.pas index 91821df24e..d549554c20 100644 --- a/compiler/llvm/llvmbase.pas +++ b/compiler/llvm/llvmbase.pas @@ -69,7 +69,8 @@ interface { fpc pseudo opcodes } la_type, { type definition } la_x_to_inttoptr, { have to convert something first to int before it can be converted to a pointer } - la_ptrtoint_to_x { have to convert a pointer first to int before it can be converted to something else } + la_ptrtoint_to_x, { have to convert a pointer first to int before it can be converted to something else } + la_asmblock ); tllvmvalueextension = (lve_none, lve_zeroext, lve_signext);