diff --git a/compiler/aarch64/hlcgcpu.pas b/compiler/aarch64/hlcgcpu.pas index d7a61331be..9bd5a530f1 100644 --- a/compiler/aarch64/hlcgcpu.pas +++ b/compiler/aarch64/hlcgcpu.pas @@ -45,8 +45,6 @@ interface procedure a_load_regconst_subsetreg_intern(list: TAsmList; fromsize, subsetsize: tdef; fromreg: tregister; const sreg: tsubsetregister; slopt: tsubsetloadopt); override; end; - procedure create_hlcodegen; - implementation uses @@ -219,11 +217,14 @@ implementation end; - procedure create_hlcodegen; + procedure create_hlcodegen_cpu; begin hlcg:=thlcgaarch64.create; create_codegen; end; +begin + chlcgobj:=thlcgaarch64; + create_hlcodegen:=@create_hlcodegen_cpu; end. diff --git a/compiler/arm/hlcgcpu.pas b/compiler/arm/hlcgcpu.pas index 993c2a2f90..fdab082566 100644 --- a/compiler/arm/hlcgcpu.pas +++ b/compiler/arm/hlcgcpu.pas @@ -46,8 +46,6 @@ interface procedure a_jmp_external_name(list: TAsmList; const externalname: TSymStr); override; end; - procedure create_hlcodegen; - implementation uses @@ -257,7 +255,7 @@ implementation - procedure create_hlcodegen; + procedure create_hlcodegen_cpu; begin if GenerateThumbCode then hlcg:=tthumbhlcgcpu.create @@ -268,4 +266,5 @@ implementation begin chlcgobj:=tbasehlcgarm; + create_hlcodegen:=@create_hlcodegen_cpu; end. diff --git a/compiler/avr/hlcgcpu.pas b/compiler/avr/hlcgcpu.pas index e69388e2a8..6a75a6c6ac 100644 --- a/compiler/avr/hlcgcpu.pas +++ b/compiler/avr/hlcgcpu.pas @@ -38,8 +38,6 @@ interface procedure g_intf_wrapper(list: TAsmList; procdef: tprocdef; const labelname: string; ioffset: longint);override; end; - procedure create_hlcodegen; - implementation uses @@ -52,7 +50,7 @@ implementation end; - procedure create_hlcodegen; + procedure create_hlcodegen_cpu; begin hlcg:=thlcgcpu.create; create_codegen; @@ -60,4 +58,5 @@ implementation begin chlcgobj:=thlcgcpu; + create_hlcodegen:=@create_hlcodegen_cpu; end. diff --git a/compiler/hlcgobj.pas b/compiler/hlcgobj.pas index 619336d814..8ae0de9633 100644 --- a/compiler/hlcgobj.pas +++ b/compiler/hlcgobj.pas @@ -669,7 +669,7 @@ unit hlcgobj; { class type of high level code generator class (also valid when hlcg is nil, in order to be able to call its virtual class methods) } chlcgobj: thlcgobjclass; - + create_hlcodegen: TProcedure; procedure destroy_hlcodegen; diff --git a/compiler/i386/hlcgcpu.pas b/compiler/i386/hlcgcpu.pas index e975600ca0..8001d41d95 100644 --- a/compiler/i386/hlcgcpu.pas +++ b/compiler/i386/hlcgcpu.pas @@ -52,8 +52,6 @@ interface procedure g_intf_wrapper(list: TAsmList; procdef: tprocdef; const labelname: string; ioffset: longint);override; end; - procedure create_hlcodegen; - implementation uses @@ -443,7 +441,7 @@ implementation end; - procedure create_hlcodegen; + procedure create_hlcodegen_cpu; begin hlcg:=thlcgcpu.create; create_codegen; @@ -453,4 +451,5 @@ implementation begin chlcgobj:=thlcgcpu; + create_hlcodegen:=@create_hlcodegen_cpu; end. diff --git a/compiler/i8086/hlcgcpu.pas b/compiler/i8086/hlcgcpu.pas index 43b104cd29..8e8b9852e7 100644 --- a/compiler/i8086/hlcgcpu.pas +++ b/compiler/i8086/hlcgcpu.pas @@ -89,8 +89,6 @@ interface procedure location_force_mem(list:TAsmList;var l:tlocation;size:tdef);override; end; - procedure create_hlcodegen; - implementation uses @@ -713,7 +711,7 @@ implementation end; - procedure create_hlcodegen; + procedure create_hlcodegen_cpu; begin hlcg:=thlcgcpu.create; create_codegen; @@ -722,4 +720,5 @@ implementation begin chlcgobj:=thlcgcpu; + create_hlcodegen:=@create_hlcodegen_cpu; end. diff --git a/compiler/jvm/hlcgcpu.pas b/compiler/jvm/hlcgcpu.pas index 487588d92b..9cb3add73f 100644 --- a/compiler/jvm/hlcgcpu.pas +++ b/compiler/jvm/hlcgcpu.pas @@ -234,8 +234,6 @@ uses end; - procedure create_hlcodegen; - const opcmp2if: array[topcmp] of tasmop = (A_None, @@ -2553,7 +2551,7 @@ implementation result:=get_call_result_cgpara(pd,forceresdef); end; - procedure create_hlcodegen; + procedure create_hlcodegen_cpu; begin hlcg:=thlcgjvm.create; create_codegen; @@ -2561,4 +2559,5 @@ implementation begin chlcgobj:=thlcgjvm; + create_hlcodegen:=@create_hlcodegen_cpu; end. diff --git a/compiler/llvm/hlcgllvm.pas b/compiler/llvm/hlcgllvm.pas index 734ef76ed8..6469c527b9 100644 --- a/compiler/llvm/hlcgllvm.pas +++ b/compiler/llvm/hlcgllvm.pas @@ -157,9 +157,6 @@ uses procedure set_call_function_result(const list: TAsmList; const pd: tabstractprocdef; const llvmretdef, hlretdef: tdef; const resval: tregister; var retpara: tcgpara); end; - procedure create_hlcodegen; - - implementation uses @@ -172,6 +169,9 @@ implementation pass_2,procinfo,llvmpi,cpuinfo,cgobj,cgllvm,cghlcpu, cgcpu,hlcgcpu; + var + create_hlcodegen_cpu: TProcedure = nil; + const topcg2llvmop: array[topcg] of tllvmop = { OP_NONE OP_MOVE OP_ADD OP_AND OP_DIV OP_IDIV OP_IMUL OP_MUL } @@ -2052,7 +2052,7 @@ implementation end; - procedure create_hlcodegen; + procedure create_hlcodegen_llvm; begin if not assigned(current_procinfo) or not(po_assembler in current_procinfo.procdef.procoptions) then @@ -2064,11 +2064,20 @@ implementation else begin tgobjclass:=orgtgclass; - hlcgcpu.create_hlcodegen; + create_hlcodegen_cpu; { todo: handle/remove chlcgobj } end; end; begin chlcgobj:=thlcgllvm; + { this unit must initialise after hlcgobj; + message system has not been initialised yet here } + if not assigned(create_hlcodegen) then + begin + writeln('Internalerror 2018052003'); + halt(1); + end; + create_hlcodegen_cpu:=create_hlcodegen; + create_hlcodegen:=@create_hlcodegen_llvm; end. diff --git a/compiler/llvm/llvmpara.pas b/compiler/llvm/llvmpara.pas index af1ce97cdd..2a6642ca32 100644 --- a/compiler/llvm/llvmpara.pas +++ b/compiler/llvm/llvmpara.pas @@ -231,6 +231,11 @@ unit llvmpara; end; begin + if not assigned(paramanager) then + begin + writeln('Internalerror 2018052006'); + halt(1); + end; { replace the native parameter manager. Maybe this has to be moved to a procedure like the creations of the code generators, but possibly not since we still call the original paramanager } diff --git a/compiler/llvm/llvmpi.pas b/compiler/llvm/llvmpi.pas index 8acba1a774..6bbc723ce7 100644 --- a/compiler/llvm/llvmpi.pas +++ b/compiler/llvm/llvmpi.pas @@ -98,6 +98,11 @@ implementation begin + if not assigned(cprocinfo) then + begin + writeln('Internalerror 2018052005'); + halt(1); + end; cprocinfo:=tllvmprocinfo; end. diff --git a/compiler/llvm/tgllvm.pas b/compiler/llvm/tgllvm.pas index b570bbb81f..96d564ba9e 100644 --- a/compiler/llvm/tgllvm.pas +++ b/compiler/llvm/tgllvm.pas @@ -183,6 +183,11 @@ implementation begin + if not assigned(tgobjclass) then + begin + writeln('Internalerror 2018052004'); + halt(1); + end; orgtgclass:=tgobjclass; tgobjclass:=ttgllvm; end. diff --git a/compiler/m68k/hlcgcpu.pas b/compiler/m68k/hlcgcpu.pas index 933df656ab..dfdb269760 100644 --- a/compiler/m68k/hlcgcpu.pas +++ b/compiler/m68k/hlcgcpu.pas @@ -47,8 +47,6 @@ interface procedure gen_load_loc_function_result(list: TAsmList; vardef: tdef; const l: tlocation);override; end; - procedure create_hlcodegen; - implementation uses @@ -264,7 +262,7 @@ implementation end; - procedure create_hlcodegen; + procedure create_hlcodegen_cpu; begin hlcg:=thlcgcpu.create; create_codegen; @@ -272,4 +270,5 @@ implementation begin chlcgobj:=thlcgcpu; + create_hlcodegen:=@create_hlcodegen_cpu; end. diff --git a/compiler/mips/hlcgcpu.pas b/compiler/mips/hlcgcpu.pas index 91c2d80c16..85d0298866 100644 --- a/compiler/mips/hlcgcpu.pas +++ b/compiler/mips/hlcgcpu.pas @@ -46,8 +46,6 @@ uses procedure a_jmp_external_name(list: TAsmList; const externalname: TSymStr);override; end; - procedure create_hlcodegen; - implementation uses @@ -275,7 +273,7 @@ implementation end; - procedure create_hlcodegen; + procedure create_hlcodegen_cpu; begin hlcg:=thlcgmips.create; create_codegen; @@ -283,4 +281,5 @@ implementation begin chlcgobj:=thlcgmips; + create_hlcodegen:=@create_hlcodegen_cpu; end. diff --git a/compiler/ncgutil.pas b/compiler/ncgutil.pas index fc9775a3ad..9297205080 100644 --- a/compiler/ncgutil.pas +++ b/compiler/ncgutil.pas @@ -111,10 +111,6 @@ implementation dbgbase, nbas,ncon,nld,nmem,nutils, tgobj,cgobj,hlcgobj,hlcgcpu -{$ifdef llvm} - { override create_hlcodegen from hlcgcpu } - , hlcgllvm -{$endif} {$ifdef powerpc} , cpupi {$endif} diff --git a/compiler/powerpc/hlcgcpu.pas b/compiler/powerpc/hlcgcpu.pas index 3abee7e44e..a7e5566cf0 100644 --- a/compiler/powerpc/hlcgcpu.pas +++ b/compiler/powerpc/hlcgcpu.pas @@ -40,8 +40,6 @@ interface procedure a_load_regconst_subsetreg_intern(list: TAsmList; fromsize, subsetsize: tdef; fromreg: tregister; const sreg: tsubsetregister; slopt: tsubsetloadopt); override; end; - procedure create_hlcodegen; - implementation uses @@ -111,7 +109,7 @@ implementation - procedure create_hlcodegen; + procedure create_hlcodegen_cpu; begin hlcg:=thlcgcpu.create; create_codegen; @@ -120,5 +118,6 @@ implementation begin chlcgobj:=thlcgcpu; + create_hlcodegen:=@create_hlcodegen_cpu; end. diff --git a/compiler/powerpc64/hlcgcpu.pas b/compiler/powerpc64/hlcgcpu.pas index 49883f73e5..0abf834742 100644 --- a/compiler/powerpc64/hlcgcpu.pas +++ b/compiler/powerpc64/hlcgcpu.pas @@ -41,8 +41,6 @@ type procedure a_load_regconst_subsetreg_intern(list : TAsmList; fromsize, subsetsize: tdef; fromreg: tregister; const sreg: tsubsetregister; slopt: tsubsetloadopt); override; end; - procedure create_hlcodegen; - implementation uses @@ -119,7 +117,7 @@ implementation end; - procedure create_hlcodegen; + procedure create_hlcodegen_cpu; begin hlcg:=thlcgcpu.create; create_codegen; @@ -129,4 +127,5 @@ implementation begin chlcgobj:=thlcgcpu; + create_hlcodegen:=@create_hlcodegen_cpu; end. diff --git a/compiler/psub.pas b/compiler/psub.pas index 83fbbe11c1..090003ab04 100644 --- a/compiler/psub.pas +++ b/compiler/psub.pas @@ -115,10 +115,6 @@ implementation pbase,pstatmnt,pdecl,pdecsub,pexports,pgenutil,pparautl, { codegen } tgobj,cgbase,cgobj,hlcgobj,hlcgcpu,dbgbase, -{$ifdef llvm} - { override create_hlcodegen from hlcgcpu } - hlcgllvm, -{$endif} ncgutil, optbase, opttail, diff --git a/compiler/riscv/hlcgrv.pas b/compiler/riscv/hlcgrv.pas index 30a1d66968..40bcaf92d8 100644 --- a/compiler/riscv/hlcgrv.pas +++ b/compiler/riscv/hlcgrv.pas @@ -256,5 +256,16 @@ implementation list.concat(Tai_symbol_end.Create(sym)); end; + + procedure create_hlcodegen_cpu; + begin + hlcg:=thlcgriscv.create; +// create_codegen; + end; + + +begin + chlcgobj:=thlcgriscv; + create_hlcodegen:=@create_hlcodegen_cpu; end. diff --git a/compiler/sparcgen/hlcgcpu.pas b/compiler/sparcgen/hlcgcpu.pas index e22e4e31c0..cedf7adee1 100644 --- a/compiler/sparcgen/hlcgcpu.pas +++ b/compiler/sparcgen/hlcgcpu.pas @@ -42,8 +42,6 @@ interface procedure a_jmp_external_name(list: TAsmList; const externalname: TSymStr);override; end; - procedure create_hlcodegen; - implementation uses @@ -135,7 +133,7 @@ implementation end; - procedure create_hlcodegen; + procedure create_hlcodegen_cpu; begin hlcg:=thlcgcpu.create; create_codegen; @@ -143,4 +141,5 @@ implementation begin chlcgobj:=thlcgcpu; + create_hlcodegen:=@create_hlcodegen_cpu; end. diff --git a/compiler/x86_64/hlcgcpu.pas b/compiler/x86_64/hlcgcpu.pas index 640214e954..096425300e 100644 --- a/compiler/x86_64/hlcgcpu.pas +++ b/compiler/x86_64/hlcgcpu.pas @@ -38,8 +38,6 @@ interface procedure g_intf_wrapper(list: TAsmList; procdef: tprocdef; const labelname: string; ioffset: longint);override; end; - procedure create_hlcodegen; - implementation uses @@ -113,7 +111,7 @@ implementation end; - procedure create_hlcodegen; + procedure create_hlcodegen_cpu; begin hlcg:=thlcgcpu.create; create_codegen; @@ -121,4 +119,5 @@ implementation begin chlcgobj:=thlcgcpu; + create_hlcodegen:=@create_hlcodegen_cpu; end.