diff options
author | florian <florian@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2020-04-29 20:01:53 +0000 |
---|---|---|
committer | florian <florian@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2020-04-29 20:01:53 +0000 |
commit | 1d548c7069156314f36748788f7bfa9d4dcd2d88 (patch) | |
tree | cb222e3a6253f300ef3d963cf54efe5f3444c3e4 /compiler/cg64f32.pas | |
parent | deef5bfcdbf7b98723c8563554e672760a0ae09a (diff) | |
download | fpc-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.pas | 20 |
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 |