* made a_call_ref of PowerPC generic, we need to allocate a register after all on risc platforms

git-svn-id: trunk@18962 -
This commit is contained in:
florian 2011-09-03 20:37:53 +00:00
parent b17a9385e5
commit 6d996bf832
2 changed files with 12 additions and 15 deletions

View File

@ -223,14 +223,10 @@ unit cgobj;
{# Emits instruction to call the method specified by symbol name. {# Emits instruction to call the method specified by symbol name.
This routine must be overridden for each new target cpu. This routine must be overridden for each new target cpu.
There is no a_call_ref because loading the reference will use
a temp register on most cpu's resulting in conflicts with the
registers used for the parameters (PFV)
} }
procedure a_call_name(list : TAsmList;const s : string; weak: boolean);virtual; abstract; procedure a_call_name(list : TAsmList;const s : string; weak: boolean);virtual; abstract;
procedure a_call_reg(list : TAsmList;reg : tregister);virtual; abstract; procedure a_call_reg(list : TAsmList;reg : tregister);virtual; abstract;
procedure a_call_ref(list : TAsmList;ref : treference);virtual; abstract; procedure a_call_ref(list : TAsmList;ref : treference);virtual;
{ same as a_call_name, might be overridden on certain architectures to emit { same as a_call_name, might be overridden on certain architectures to emit
static calls without usage of a got trampoline } static calls without usage of a got trampoline }
procedure a_call_name_static(list : TAsmList;const s : string);virtual; procedure a_call_name_static(list : TAsmList;const s : string);virtual;
@ -4220,12 +4216,23 @@ implementation
a_jmp_name(list,externalname); a_jmp_name(list,externalname);
end; end;
procedure tcg.a_call_name_static(list : TAsmList;const s : string); procedure tcg.a_call_name_static(list : TAsmList;const s : string);
begin begin
a_call_name(list,s,false); a_call_name(list,s,false);
end; end;
procedure tcg.a_call_ref(list : TAsmList;ref: treference);
var
tempreg : TRegister;
begin
tempreg := getintregister(list, OS_ADDR);
a_load_ref_reg(list,OS_ADDR,OS_ADDR,ref,tempreg);
a_call_reg(list,tempreg);
end;
function tcg.g_indirect_sym_load(list:TAsmList;const symname: string; weak: boolean): tregister; function tcg.g_indirect_sym_load(list:TAsmList;const symname: string; weak: boolean): tregister;
var var
l: tasmsymbol; l: tasmsymbol;

View File

@ -410,16 +410,6 @@ unit cgppc;
end; end;
procedure tcgppcgen.a_call_ref(list : TAsmList;ref: treference);
var
tempreg : TRegister;
begin
tempreg := getintregister(list, OS_ADDR);
a_load_ref_reg(list,OS_ADDR,OS_ADDR,ref,tempreg);
a_call_reg(list,tempreg);
end;
procedure tcgppcgen.a_load_reg_ref(list: TAsmList; fromsize, tosize: TCGSize; procedure tcgppcgen.a_load_reg_ref(list: TAsmList; fromsize, tosize: TCGSize;
reg: tregister; const ref: treference); reg: tregister; const ref: treference);