From ade45eb31a623469f9f67a8e1b9d5eef92939490 Mon Sep 17 00:00:00 2001 From: Jonas Maebe Date: Mon, 21 Nov 2016 07:39:09 +0000 Subject: [PATCH] + support for llvm load nodes of labelsym using blockaddress() git-svn-id: trunk@34945 - --- compiler/llvm/nllvmld.pas | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/compiler/llvm/nllvmld.pas b/compiler/llvm/nllvmld.pas index 5b61094600..cd1c59416d 100644 --- a/compiler/llvm/nllvmld.pas +++ b/compiler/llvm/nllvmld.pas @@ -49,10 +49,11 @@ implementation uses systems, - aasmdata, + aasmbase,aasmdata,aasmllvm, nld, - symtable,symconst,symdef,symsym, - tgobj,cgbase,hlcgobj; + symtable,symconst,symdef,symsym,defutil, + procinfo,tgobj, + llvmbase,cgbase,hlcgobj; function tllvmloadnode.pass_1: tnode; begin @@ -75,6 +76,7 @@ procedure tllvmloadnode.pass_generate_code; field: tfieldvarsym; procreg, selfreg: tregister; selfdef: tdef; + ai: taillvm; begin inherited; case symtableentry.typ of @@ -117,6 +119,18 @@ procedure tllvmloadnode.pass_generate_code; location.reference:=href; end; end; + labelsym: + begin + selfreg:=hlcg.getaddressregister(current_asmdata.CurrAsmList,voidcodepointertype); + ai:=taillvm.blockaddress( + current_asmdata.RefAsmSymbol(current_procinfo.procdef.mangledname,AT_FUNCTION), + location.reference.symbol + ); + current_asmdata.CurrAsmList.concat( + taillvm.op_reg_tai_size(la_bitcast,selfreg,ai,voidcodepointertype) + ); + reference_reset_base(location.reference,selfreg,0,location.reference.alignment); + end; end; end;