From 948ef20eccb2fdf92a088388525c304a60933f49 Mon Sep 17 00:00:00 2001 From: peter Date: Sun, 1 Jun 2003 01:02:39 +0000 Subject: [PATCH] * generic a_call_ref --- compiler/cgobj.pas | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/compiler/cgobj.pas b/compiler/cgobj.pas index 220051129c..1f24d94761 100644 --- a/compiler/cgobj.pas +++ b/compiler/cgobj.pas @@ -184,7 +184,7 @@ unit cgobj; This routine must be overriden for each new target cpu. } procedure a_call_name(list : taasmoutput;const s : string);virtual; abstract; - procedure a_call_ref(list : taasmoutput;const ref : treference);virtual;abstract; + procedure a_call_ref(list : taasmoutput;const ref : treference);virtual; procedure a_call_reg(list : taasmoutput;reg : tregister);virtual;abstract; procedure a_call_loc(list : taasmoutput;const loc:tlocation); @@ -864,6 +864,25 @@ unit cgobj; end; + procedure tcg.a_call_ref(list : taasmoutput;const ref:treference); + var + tmpreg: tregister; + begin +{$ifdef newra} + tmpreg:=rg.getaddressregister(list); +{$else} + tmpreg := get_scratch_reg_address(list); +{$endif} + a_load_ref_reg(list,OS_ADDR,ref,tmpreg); + a_call_reg(list,tmpreg); +{$ifdef newra} + rg.ungetaddressregister(list,tmpreg); +{$else} + free_scratch_reg(list,tmpreg); +{$endif} + end; + + procedure tcg.a_call_loc(list : taasmoutput;const loc:tlocation); begin case loc.loc of @@ -1140,8 +1159,10 @@ unit cgobj; procedure tcg.a_op_reg_reg_reg(list: taasmoutput; op: TOpCg; size: tcgsize; src1, src2, dst: tregister); +{$ifdef newra} var tmpreg: tregister; +{$endif newra} begin if (dst.number <> src1.number) then begin @@ -1691,7 +1712,10 @@ finalization end. { $Log$ - Revision 1.103 2003-05-30 23:57:08 peter + Revision 1.104 2003-06-01 01:02:39 peter + * generic a_call_ref + + Revision 1.103 2003/05/30 23:57:08 peter * more sparc cleanup * accumulator removed, splitted in function_return_reg (called) and function_result_reg (caller)