From 10b3ce1ba57c8f05522505456cf8d71102b0cf5c Mon Sep 17 00:00:00 2001 From: nickysn Date: Fri, 31 May 2013 17:13:38 +0000 Subject: [PATCH] * fixed an opsize bug in ti8086addnode.second_add64bit, which caused 32-bit instructions to be emitted git-svn-id: trunk@24670 - --- compiler/i8086/n8086add.pas | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/compiler/i8086/n8086add.pas b/compiler/i8086/n8086add.pas index cb28e6f5f7..c28c6fdf3d 100644 --- a/compiler/i8086/n8086add.pas +++ b/compiler/i8086/n8086add.pas @@ -84,7 +84,6 @@ interface var op : TOpCG; op1,op2 : TAsmOp; - opsize : TOpSize; hregister, hregister2 : tregister; hl4 : tasmlabel; @@ -97,7 +96,6 @@ interface op1:=A_NONE; op2:=A_NONE; mboverflow:=false; - opsize:=S_L; unsigned:=((left.resultdef.typ=orddef) and (torddef(left.resultdef).ordtype=u64bit)) or ((right.resultdef.typ=orddef) and @@ -174,16 +172,16 @@ interface begin r:=cg.getintregister(current_asmdata.CurrAsmList,OS_32); cg64.a_load64low_loc_reg(current_asmdata.CurrAsmList,right.location,r); - emit_reg_reg(op1,opsize,left.location.register64.reglo,r); - emit_reg_reg(op2,opsize,GetNextReg(left.location.register64.reglo),GetNextReg(r)); - emit_reg_reg(A_MOV,opsize,r,left.location.register64.reglo); - emit_reg_reg(A_MOV,opsize,GetNextReg(r),GetNextReg(left.location.register64.reglo)); + emit_reg_reg(op1,S_W,left.location.register64.reglo,r); + emit_reg_reg(op2,S_W,GetNextReg(left.location.register64.reglo),GetNextReg(r)); + emit_reg_reg(A_MOV,S_W,r,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); { the carry flag is still ok } - emit_reg_reg(op2,opsize,left.location.register64.reghi,r); - emit_reg_reg(op2,opsize,GetNextReg(left.location.register64.reghi),GetNextReg(r)); - emit_reg_reg(A_MOV,opsize,r,left.location.register64.reghi); - emit_reg_reg(A_MOV,opsize,GetNextReg(r),GetNextReg(left.location.register64.reghi)); + emit_reg_reg(op2,S_W,left.location.register64.reghi,r); + emit_reg_reg(op2,S_W,GetNextReg(left.location.register64.reghi),GetNextReg(r)); + emit_reg_reg(A_MOV,S_W,r,left.location.register64.reghi); + emit_reg_reg(A_MOV,S_W,GetNextReg(r),GetNextReg(left.location.register64.reghi)); end else begin