mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-08 10:26:13 +02:00
* fixed an opsize bug in ti8086addnode.second_add64bit, which caused 32-bit instructions to be emitted
git-svn-id: trunk@24670 -
This commit is contained in:
parent
fba73d3c96
commit
10b3ce1ba5
@ -84,7 +84,6 @@ interface
|
|||||||
var
|
var
|
||||||
op : TOpCG;
|
op : TOpCG;
|
||||||
op1,op2 : TAsmOp;
|
op1,op2 : TAsmOp;
|
||||||
opsize : TOpSize;
|
|
||||||
hregister,
|
hregister,
|
||||||
hregister2 : tregister;
|
hregister2 : tregister;
|
||||||
hl4 : tasmlabel;
|
hl4 : tasmlabel;
|
||||||
@ -97,7 +96,6 @@ interface
|
|||||||
op1:=A_NONE;
|
op1:=A_NONE;
|
||||||
op2:=A_NONE;
|
op2:=A_NONE;
|
||||||
mboverflow:=false;
|
mboverflow:=false;
|
||||||
opsize:=S_L;
|
|
||||||
unsigned:=((left.resultdef.typ=orddef) and
|
unsigned:=((left.resultdef.typ=orddef) and
|
||||||
(torddef(left.resultdef).ordtype=u64bit)) or
|
(torddef(left.resultdef).ordtype=u64bit)) or
|
||||||
((right.resultdef.typ=orddef) and
|
((right.resultdef.typ=orddef) and
|
||||||
@ -174,16 +172,16 @@ interface
|
|||||||
begin
|
begin
|
||||||
r:=cg.getintregister(current_asmdata.CurrAsmList,OS_32);
|
r:=cg.getintregister(current_asmdata.CurrAsmList,OS_32);
|
||||||
cg64.a_load64low_loc_reg(current_asmdata.CurrAsmList,right.location,r);
|
cg64.a_load64low_loc_reg(current_asmdata.CurrAsmList,right.location,r);
|
||||||
emit_reg_reg(op1,opsize,left.location.register64.reglo,r);
|
emit_reg_reg(op1,S_W,left.location.register64.reglo,r);
|
||||||
emit_reg_reg(op2,opsize,GetNextReg(left.location.register64.reglo),GetNextReg(r));
|
emit_reg_reg(op2,S_W,GetNextReg(left.location.register64.reglo),GetNextReg(r));
|
||||||
emit_reg_reg(A_MOV,opsize,r,left.location.register64.reglo);
|
emit_reg_reg(A_MOV,S_W,r,left.location.register64.reglo);
|
||||||
emit_reg_reg(A_MOV,opsize,GetNextReg(r),GetNextReg(left.location.register64.reglo));
|
emit_reg_reg(A_MOV,S_W,GetNextReg(r),GetNextReg(left.location.register64.reglo));
|
||||||
cg64.a_load64high_loc_reg(current_asmdata.CurrAsmList,right.location,r);
|
cg64.a_load64high_loc_reg(current_asmdata.CurrAsmList,right.location,r);
|
||||||
{ the carry flag is still ok }
|
{ the carry flag is still ok }
|
||||||
emit_reg_reg(op2,opsize,left.location.register64.reghi,r);
|
emit_reg_reg(op2,S_W,left.location.register64.reghi,r);
|
||||||
emit_reg_reg(op2,opsize,GetNextReg(left.location.register64.reghi),GetNextReg(r));
|
emit_reg_reg(op2,S_W,GetNextReg(left.location.register64.reghi),GetNextReg(r));
|
||||||
emit_reg_reg(A_MOV,opsize,r,left.location.register64.reghi);
|
emit_reg_reg(A_MOV,S_W,r,left.location.register64.reghi);
|
||||||
emit_reg_reg(A_MOV,opsize,GetNextReg(r),GetNextReg(left.location.register64.reghi));
|
emit_reg_reg(A_MOV,S_W,GetNextReg(r),GetNextReg(left.location.register64.reghi));
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
begin
|
begin
|
||||||
|
Loading…
Reference in New Issue
Block a user