mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-12-16 04:10:31 +01:00
* fixed not(boolean32) and not(boolean64) on i8086
git-svn-id: trunk@26369 -
This commit is contained in:
parent
de89827eb7
commit
270444508a
@ -242,7 +242,7 @@ interface
|
||||
LOC_CREFERENCE,
|
||||
LOC_REFERENCE:
|
||||
begin
|
||||
{$ifndef cpu64bitalu}
|
||||
{$if defined(cpu32bitalu)}
|
||||
if is_64bit(resultdef) then
|
||||
begin
|
||||
hreg:=cg.GetIntRegister(current_asmdata.CurrAsmList,OS_32);
|
||||
@ -252,7 +252,29 @@ interface
|
||||
cg.a_op_ref_reg(current_asmdata.CurrAsmList,OP_OR,OS_32,left.location.reference,hreg);
|
||||
end
|
||||
else
|
||||
{$endif cpu64bitalu}
|
||||
{$elseif defined(cpu16bitalu)}
|
||||
if is_64bit(resultdef) then
|
||||
begin
|
||||
hreg:=cg.GetIntRegister(current_asmdata.CurrAsmList,OS_16);
|
||||
tcgx86(cg).make_simple_ref(current_asmdata.CurrAsmList,left.location.reference);
|
||||
cg.a_load_ref_reg(current_asmdata.CurrAsmList,OS_16,OS_16,left.location.reference,hreg);
|
||||
inc(left.location.reference.offset,2);
|
||||
cg.a_op_ref_reg(current_asmdata.CurrAsmList,OP_OR,OS_16,left.location.reference,hreg);
|
||||
inc(left.location.reference.offset,2);
|
||||
cg.a_op_ref_reg(current_asmdata.CurrAsmList,OP_OR,OS_16,left.location.reference,hreg);
|
||||
inc(left.location.reference.offset,2);
|
||||
cg.a_op_ref_reg(current_asmdata.CurrAsmList,OP_OR,OS_16,left.location.reference,hreg);
|
||||
end
|
||||
else if is_32bit(resultdef) then
|
||||
begin
|
||||
hreg:=cg.GetIntRegister(current_asmdata.CurrAsmList,OS_16);
|
||||
tcgx86(cg).make_simple_ref(current_asmdata.CurrAsmList,left.location.reference);
|
||||
cg.a_load_ref_reg(current_asmdata.CurrAsmList,OS_16,OS_16,left.location.reference,hreg);
|
||||
inc(left.location.reference.offset,2);
|
||||
cg.a_op_ref_reg(current_asmdata.CurrAsmList,OP_OR,OS_16,left.location.reference,hreg);
|
||||
end
|
||||
else
|
||||
{$endif}
|
||||
emit_const_ref(A_CMP, TCGSize2Opsize[opsize], 0, left.location.reference);
|
||||
location_reset(location,LOC_FLAGS,OS_NO);
|
||||
location.resflags:=F_E;
|
||||
@ -265,14 +287,28 @@ interface
|
||||
LOC_SUBSETREF,
|
||||
LOC_CSUBSETREF :
|
||||
begin
|
||||
{$ifndef cpu64bitalu}
|
||||
{$if defined(cpu32bitalu)}
|
||||
if is_64bit(resultdef) then
|
||||
begin
|
||||
hlcg.location_force_reg(current_asmdata.CurrAsmList,left.location,left.resultdef,resultdef,false);
|
||||
emit_reg_reg(A_OR,S_L,left.location.register64.reghi,left.location.register64.reglo);
|
||||
end
|
||||
else
|
||||
{$endif cpu64bitalu}
|
||||
{$elseif defined(cpu16bitalu)}
|
||||
if is_64bit(resultdef) then
|
||||
begin
|
||||
hlcg.location_force_reg(current_asmdata.CurrAsmList,left.location,left.resultdef,resultdef,false);
|
||||
emit_reg_reg(A_OR,S_W,GetNextReg(left.location.register64.reghi),left.location.register64.reghi);
|
||||
emit_reg_reg(A_OR,S_W,GetNextReg(left.location.register64.reglo),left.location.register64.reglo);
|
||||
emit_reg_reg(A_OR,S_W,left.location.register64.reghi,left.location.register64.reglo);
|
||||
end
|
||||
else if is_32bit(resultdef) then
|
||||
begin
|
||||
hlcg.location_force_reg(current_asmdata.CurrAsmList,left.location,left.resultdef,resultdef,false);
|
||||
emit_reg_reg(A_OR,S_L,GetNextReg(left.location.register),left.location.register);
|
||||
end
|
||||
else
|
||||
{$endif}
|
||||
begin
|
||||
hlcg.location_force_reg(current_asmdata.CurrAsmList,left.location,left.resultdef,resultdef,true);
|
||||
emit_reg_reg(A_TEST,TCGSize2Opsize[opsize],left.location.register,left.location.register);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user