|
@@ -616,22 +616,22 @@ implementation
|
|
|
|
|
|
procedure tcginlinenode.second_abs_long;
|
|
procedure tcginlinenode.second_abs_long;
|
|
var
|
|
var
|
|
- opsize : tcgsize;
|
|
|
|
- tempreg1, tempreg2 : tregister;
|
|
|
|
|
|
+ opsize : tcgsize;
|
|
|
|
+ tempreg1, tempreg2 : tregister;
|
|
begin
|
|
begin
|
|
opsize := def_cgsize(left.resultdef);
|
|
opsize := def_cgsize(left.resultdef);
|
|
|
|
|
|
secondpass(left);
|
|
secondpass(left);
|
|
location_force_reg(current_asmdata.CurrAsmList, left.location, opsize, false);
|
|
location_force_reg(current_asmdata.CurrAsmList, left.location, opsize, false);
|
|
- location := left.location;
|
|
|
|
|
|
+ location := left.location;
|
|
location.register := cg.getintregister(current_asmdata.CurrAsmList, opsize);
|
|
location.register := cg.getintregister(current_asmdata.CurrAsmList, opsize);
|
|
|
|
|
|
- tempreg1 := cg.getintregister(current_asmdata.CurrAsmList, opsize);
|
|
|
|
- tempreg2 := cg.getintregister(current_asmdata.CurrAsmList, opsize);
|
|
|
|
|
|
+ tempreg1 := cg.getintregister(current_asmdata.CurrAsmList, opsize);
|
|
|
|
+ tempreg2 := cg.getintregister(current_asmdata.CurrAsmList, opsize);
|
|
|
|
|
|
- cg.a_op_const_reg_reg(current_asmdata.CurrAsmList, OP_SAR, OS_INT, tcgsize2size[opsize]*8-1, left.location.register, tempreg1);
|
|
|
|
- cg.a_op_reg_reg_reg(current_asmdata.CurrAsmList, OP_XOR, OS_INT, left.location.register, tempreg1, tempreg2);
|
|
|
|
- cg.a_op_reg_reg_reg(current_asmdata.CurrAsmlist, OP_SUB, OS_INT, tempreg1, tempreg2, location.register);
|
|
|
|
|
|
+ cg.a_op_const_reg_reg(current_asmdata.CurrAsmList, OP_SAR, OS_INT, tcgsize2size[opsize]*8-1, left.location.register, tempreg1);
|
|
|
|
+ cg.a_op_reg_reg_reg(current_asmdata.CurrAsmList, OP_XOR, OS_INT, left.location.register, tempreg1, tempreg2);
|
|
|
|
+ cg.a_op_reg_reg_reg(current_asmdata.CurrAsmlist, OP_SUB, OS_INT, tempreg1, tempreg2, location.register);
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
|