diff --git a/compiler/i8086/n8086mem.pas b/compiler/i8086/n8086mem.pas index 541e578679..ee674f30c1 100644 --- a/compiler/i8086/n8086mem.pas +++ b/compiler/i8086/n8086mem.pas @@ -31,10 +31,6 @@ interface node,nmem,ncgmem,nx86mem; type - ti8086addrnode = class(tcgaddrnode) - procedure pass_generate_code;override; - end; - ti8086derefnode = class(tx86derefnode) procedure pass_generate_code;override; end; @@ -52,38 +48,6 @@ implementation defutil,hlcgobj, pass_2,ncgutil; -{***************************************************************************** - TI8086ADDRNODE -*****************************************************************************} - - procedure ti8086addrnode.pass_generate_code; - var - segref: treference; - begin - if (current_settings.x86memorymodel in x86_far_code_models) and - (left.nodetype=loadn) and - (tloadnode(left).symtableentry.typ=labelsym) then - begin - secondpass(left); - - location_reset(location,LOC_REGISTER,OS_32); - location.register:=cg.getintregister(current_asmdata.CurrAsmList,OS_32); - if not(left.location.loc in [LOC_REFERENCE,LOC_CREFERENCE]) then - internalerror(2013091801); - - { load offset } - cg.a_loadaddr_ref_reg(current_asmdata.CurrAsmList,left.location.reference,location.register); - - { load segment } - segref:=left.location.reference; - segref.refaddr:=addr_seg; - cg.a_load_ref_reg(current_asmdata.CurrAsmList,OS_16,OS_16,segref,GetNextReg(location.register)); - end - else - inherited; - end; - - {***************************************************************************** TI8086DEREFNODE *****************************************************************************} @@ -164,6 +128,5 @@ implementation begin - caddrnode:=ti8086addrnode; cderefnode:=ti8086derefnode; end. diff --git a/compiler/ncgmem.pas b/compiler/ncgmem.pas index f1049e7412..d86b0eb13a 100644 --- a/compiler/ncgmem.pas +++ b/compiler/ncgmem.pas @@ -193,8 +193,8 @@ implementation begin secondpass(left); - location_reset(location,LOC_REGISTER,OS_ADDR); - location.register:=cg.getaddressregister(current_asmdata.CurrAsmList); + location_reset(location,LOC_REGISTER,int_cgsize(resultdef.size)); + location.register:=hlcg.getaddressregister(current_asmdata.CurrAsmList,resultdef); if not(left.location.loc in [LOC_REFERENCE,LOC_CREFERENCE]) then { on x86_64-win64, array of chars can be returned in registers, however, when passing these arrays to other functions, the compiler wants to take @@ -205,7 +205,7 @@ implementation hlcg.location_force_mem(current_asmdata.CurrAsmList,left.location,left.resultdef) else internalerror(2006111510); - cg.a_loadaddr_ref_reg(current_asmdata.CurrAsmList,left.location.reference,location.register); + hlcg.a_loadaddr_ref_reg(current_asmdata.CurrAsmList,left.resultdef,resultdef,left.location.reference,location.register); end;