summaryrefslogtreecommitdiff
path: root/compiler/cg64f32.pas
diff options
context:
space:
mode:
authorflorian <florian@3ad0048d-3df7-0310-abae-a5850022a9f2>2020-04-29 20:01:53 +0000
committerflorian <florian@3ad0048d-3df7-0310-abae-a5850022a9f2>2020-04-29 20:01:53 +0000
commit1d548c7069156314f36748788f7bfa9d4dcd2d88 (patch)
treecb222e3a6253f300ef3d963cf54efe5f3444c3e4 /compiler/cg64f32.pas
parentdeef5bfcdbf7b98723c8563554e672760a0ae09a (diff)
downloadfpc-1d548c7069156314f36748788f7bfa9d4dcd2d88.tar.gz
* do not use an extra register in tcginlinenode.second_IncDec if not needed
git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@45177 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'compiler/cg64f32.pas')
-rw-r--r--compiler/cg64f32.pas20
1 files changed, 20 insertions, 0 deletions
diff --git a/compiler/cg64f32.pas b/compiler/cg64f32.pas
index e58472c2ea..f98fd79387 100644
--- a/compiler/cg64f32.pas
+++ b/compiler/cg64f32.pas
@@ -72,6 +72,7 @@ unit cg64f32;
procedure a_op64_reg_ref(list : TAsmList;op:TOpCG;size : tcgsize;reg : tregister64; const ref: treference);override;
procedure a_op64_const_loc(list : TAsmList;op:TOpCG;size : tcgsize;value : int64;const l: tlocation);override;
procedure a_op64_reg_loc(list : TAsmList;op:TOpCG;size : tcgsize;reg : tregister64;const l : tlocation);override;
+ procedure a_op64_ref_loc(list: TAsmList; op: TOpCG; size: tcgsize;const ref: treference; const l: tlocation);override;
procedure a_op64_loc_reg(list : TAsmList;op:TOpCG;size : tcgsize;const l : tlocation;reg : tregister64);override;
procedure a_op64_const_ref(list : TAsmList;op:TOpCG;size : tcgsize;value : int64;const ref : treference);override;
@@ -705,6 +706,25 @@ unit cg64f32;
end;
+ procedure tcg64f32.a_op64_ref_loc(list : TAsmList;op:TOpCG;size : tcgsize;const ref : treference;const l : tlocation);
+ var
+ tempreg: tregister64;
+ begin
+ case l.loc of
+ LOC_REFERENCE, LOC_CREFERENCE:
+ begin
+ tempreg.reghi:=cg.getintregister(list,OS_32);
+ tempreg.reglo:=cg.getintregister(list,OS_32);
+ a_load64_ref_reg(list,ref,tempreg);
+ a_op64_reg_ref(list,op,size,tempreg,l.reference);
+ end;
+ LOC_REGISTER,LOC_CREGISTER:
+ a_op64_ref_reg(list,op,size,ref,l.register64);
+ else
+ internalerror(2020042803);
+ end;
+ end;
+
procedure tcg64f32.a_op64_loc_reg(list : TAsmList;op:TOpCG;size : tcgsize;const l : tlocation;reg : tregister64);
begin