diff --git a/compiler/i386/cpupara.pas b/compiler/i386/cpupara.pas index 00dca5aa23..5cfed2c1dc 100644 --- a/compiler/i386/cpupara.pas +++ b/compiler/i386/cpupara.pas @@ -40,12 +40,6 @@ unit cpupara; function get_volatile_registers_int(calloption : tproccalloption):tcpuregisterset;override; function get_volatile_registers_fpu(calloption : tproccalloption):tcpuregisterset;override; function get_volatile_registers_mm(calloption : tproccalloption):tcpuregisterset;override; - { Returns the location for the nr-st 32 Bit int parameter - if every parameter before is an 32 Bit int parameter as well - and if the calling conventions for the helper routines of the - rtl are used. - } - procedure getintparaloc(pd : tabstractprocdef; nr : longint; var cgpara : tcgpara);override; function create_paraloc_info(p : tabstractprocdef; side: tcallercallee):longint;override; function create_varargs_paraloc_info(p : tabstractprocdef; varargspara:tvarargsparalist):longint;override; procedure createtempparaloc(list: TAsmList;calloption : tproccalloption;parasym : tparavarsym;can_use_final_stack_loc : boolean;var cgpara:TCGPara);override; @@ -274,51 +268,6 @@ unit cpupara; end; - procedure ti386paramanager.getintparaloc(pd : tabstractprocdef; nr : longint; var cgpara : tcgpara); - var - paraloc : pcgparalocation; - psym: tparavarsym; - pdef: tdef; - begin - psym:=tparavarsym(pd.paras[nr-1]); - pdef:=psym.vardef; - if push_addr_param(psym.varspez,pdef,pd.proccalloption) then - pdef:=getpointerdef(pdef); - cgpara.reset; - cgpara.size:=def_cgsize(pdef); - cgpara.intsize:=tcgsize2size[cgpara.size]; - cgpara.alignment:=get_para_align(pd.proccalloption); - cgpara.def:=pdef; - paraloc:=cgpara.add_location; - with paraloc^ do - begin - size:=def_cgsize(pdef); - def:=pdef; - if pd.proccalloption=pocall_register then - begin - if (nr<=length(parasupregs)) then - begin - if nr=0 then - internalerror(200309271); - loc:=LOC_REGISTER; - register:=newreg(R_INTREGISTER,parasupregs[nr-1],R_SUBWHOLE); - end - else - begin - loc:=LOC_REFERENCE; - reference.index:=NR_STACK_POINTER_REG; - { the previous parameters didn't take up room in memory } - reference.offset:=sizeof(aint)*(nr-length(parasupregs)-1) - end; - end - else - begin - loc:=LOC_REFERENCE; - reference.index:=NR_STACK_POINTER_REG; - reference.offset:=sizeof(aint)*nr; - end; - end; - end; function ti386paramanager.get_funcretloc(p : tabstractprocdef; side: tcallercallee; forcetempdef: tdef): TCGPara; diff --git a/compiler/sparc/cpupara.pas b/compiler/sparc/cpupara.pas index 4837866b25..bd9c83e135 100644 --- a/compiler/sparc/cpupara.pas +++ b/compiler/sparc/cpupara.pas @@ -35,10 +35,6 @@ interface function push_addr_param(varspez:tvarspez;def : tdef;calloption : tproccalloption) : boolean;override; function get_volatile_registers_int(calloption : tproccalloption):TCpuRegisterSet;override; function get_volatile_registers_fpu(calloption : tproccalloption):TCpuRegisterSet;override; - {Returns a structure giving the information on the storage of the parameter - (which must be an integer parameter) - @param(nr Parameter number of routine, starting from 1)} - procedure getintparaloc(pd : tabstractprocdef; nr : longint; var cgpara : tcgpara);override; function create_paraloc_info(p : TAbstractProcDef; side: tcallercallee):longint;override; function create_varargs_paraloc_info(p : TAbstractProcDef; varargspara:tvarargsparalist):longint;override; function get_funcretloc(p : tabstractprocdef; side: tcallercallee; forcetempdef: tdef): tcgpara;override; @@ -74,46 +70,6 @@ implementation end; - procedure TSparcParaManager.GetIntParaLoc(pd : tabstractprocdef; nr : longint; var cgpara : tcgpara); - var - paraloc : pcgparalocation; - psym: tparavarsym; - pdef: tdef; - begin - if nr<1 then - InternalError(2002100806); - psym:=tparavarsym(pd.paras[nr-1]); - pdef:=psym.vardef; - if push_addr_param(psym.varspez,pdef,pd.proccalloption) then - pdef:=getpointerdef(pdef); - cgpara.reset; - cgpara.size:=def_cgsize(pdef); - cgpara.intsize:=tcgsize2size[cgpara.size]; - cgpara.alignment:=std_param_align; - cgpara.def:=pdef; - paraloc:=cgpara.add_location; - with paraloc^ do - begin - { The six first parameters are passed into registers } - dec(nr); - if nr<6 then - begin - loc:=LOC_REGISTER; - register:=newreg(R_INTREGISTER,(RS_O0+nr),R_SUBWHOLE); - end - else - begin - { The other parameters are passed on the stack } - loc:=LOC_REFERENCE; - reference.index:=NR_STACK_POINTER_REG; - reference.offset:=92+(nr-6)*4; - end; - size:=def_cgsize(pdef); - def:=pdef; - end; - end; - - { true if a parameter is too large to copy and only the address is pushed } function tsparcparamanager.push_addr_param(varspez:tvarspez;def : tdef;calloption : tproccalloption) : boolean; begin diff --git a/compiler/x86_64/cpupara.pas b/compiler/x86_64/cpupara.pas index def064a2c8..1509454add 100644 --- a/compiler/x86_64/cpupara.pas +++ b/compiler/x86_64/cpupara.pas @@ -41,7 +41,6 @@ unit cpupara; function param_use_paraloc(const cgpara:tcgpara):boolean;override; function push_addr_param(varspez:tvarspez;def : tdef;calloption : tproccalloption) : boolean;override; function ret_in_param(def:tdef;pd:tabstractprocdef):boolean;override; - procedure getintparaloc(pd : tabstractprocdef; nr : longint; var cgpara : tcgpara);override; function get_volatile_registers_int(calloption : tproccalloption):tcpuregisterset;override; function get_volatile_registers_mm(calloption : tproccalloption):tcpuregisterset;override; function get_volatile_registers_fpu(calloption : tproccalloption):tcpuregisterset;override; @@ -892,62 +891,6 @@ unit cpupara; end; - procedure tx86_64paramanager.getintparaloc(pd : tabstractprocdef; nr : longint; var cgpara : tcgpara); - var - paraloc : pcgparalocation; - psym : tparavarsym; - pdef : tdef; - begin - psym:=tparavarsym(pd.paras[nr-1]); - pdef:=psym.vardef; - if push_addr_param(psym.varspez,pdef,pd.proccalloption) then - pdef:=getpointerdef(pdef); - cgpara.reset; - cgpara.size:=def_cgsize(pdef); - cgpara.intsize:=tcgsize2size[cgpara.size]; - cgpara.alignment:=get_para_align(pd.proccalloption); - cgpara.def:=pdef; - paraloc:=cgpara.add_location; - with paraloc^ do - begin - size:=def_cgsize(pdef); - paraloc^.def:=pdef; - if target_info.system=system_x86_64_win64 then - begin - if nr<1 then - internalerror(200304303) - else if nr<=high(paraintsupregs_winx64)+1 then - begin - loc:=LOC_REGISTER; - register:=newreg(R_INTREGISTER,paraintsupregs_winx64[nr-1],cgsize2subreg(R_INTREGISTER,size)); - end - else - begin - loc:=LOC_REFERENCE; - reference.index:=NR_STACK_POINTER_REG; - reference.offset:=(nr-6)*sizeof(aint); - end; - end - else - begin - if nr<1 then - internalerror(200304303) - else if nr<=high(paraintsupregs)+1 then - begin - loc:=LOC_REGISTER; - register:=newreg(R_INTREGISTER,paraintsupregs[nr-1],cgsize2subreg(R_INTREGISTER,size)); - end - else - begin - loc:=LOC_REFERENCE; - reference.index:=NR_STACK_POINTER_REG; - reference.offset:=(nr-6)*sizeof(aint); - end; - end; - end; - end; - - function tx86_64paramanager.get_funcretloc(p : tabstractprocdef; side: tcallercallee; forcetempdef: tdef): tcgpara; const intretregs: array[0..1] of tregister = (NR_FUNCTION_RETURN_REG,NR_FUNCTION_RETURN_REG_HIGH);