mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-24 13:32:31 +02:00
+ added a not-yet-complete implementation of TZ80AddNode.second_cmp. Only 8-bit unsigned comparison
works for now, and only for the <,= and <> operators git-svn-id: branches/z80@44575 -
This commit is contained in:
parent
3ed692a157
commit
f52f9dc56b
@ -26,7 +26,7 @@ unit nz80add;
|
|||||||
interface
|
interface
|
||||||
|
|
||||||
uses
|
uses
|
||||||
node,ncgadd,cpubase;
|
node,ncgadd, symtype,cpubase;
|
||||||
|
|
||||||
type
|
type
|
||||||
TZ80AddNode = class(tcgaddnode)
|
TZ80AddNode = class(tcgaddnode)
|
||||||
@ -188,15 +188,36 @@ interface
|
|||||||
unsigned : boolean;
|
unsigned : boolean;
|
||||||
tmpreg1,tmpreg2 : tregister;
|
tmpreg1,tmpreg2 : tregister;
|
||||||
i : longint;
|
i : longint;
|
||||||
|
opdef: tdef;
|
||||||
|
opsize: TCgSize;
|
||||||
begin
|
begin
|
||||||
pass_left_right;
|
|
||||||
// force_reg_left_right(true,true);
|
|
||||||
|
|
||||||
unsigned:=not(is_signed(left.resultdef)) or
|
unsigned:=not(is_signed(left.resultdef)) or
|
||||||
not(is_signed(right.resultdef));
|
not(is_signed(right.resultdef));
|
||||||
|
opdef:=left.resultdef;
|
||||||
|
opsize:=def_cgsize(opdef);
|
||||||
|
|
||||||
cg.a_load_loc_reg(current_asmdata.CurrAsmList,OS_8,GetByteLoc(left.location,0),NR_A);
|
pass_left_right;
|
||||||
cg.a_op_loc_reg(current_asmdata.CurrAsmList,OP_SUB,OS_8,GetByteLoc(right.location,0),NR_A);
|
|
||||||
|
if opsize=OS_8 then
|
||||||
|
begin
|
||||||
|
force_reg_left_right(true,true);
|
||||||
|
|
||||||
|
cg.getcpuregister(current_asmdata.CurrAsmList,NR_A);
|
||||||
|
cg.a_load_loc_reg(current_asmdata.CurrAsmList,def_cgsize(left.resultdef),left.location,NR_A);
|
||||||
|
current_asmdata.CurrAsmList.Concat(taicpu.op_reg_reg(A_CP,NR_A,right.location.register));
|
||||||
|
cg.ungetcpuregister(current_asmdata.CurrAsmList,NR_A);
|
||||||
|
|
||||||
|
location_reset(location,LOC_FLAGS,OS_NO);
|
||||||
|
location.resflags:=getresflags(unsigned);
|
||||||
|
writeln(location.resflags);
|
||||||
|
end
|
||||||
|
else
|
||||||
|
internalerror(2020040401);
|
||||||
|
|
||||||
|
// force_reg_left_right(true,true);
|
||||||
|
|
||||||
|
//cg.a_load_loc_reg(current_asmdata.CurrAsmList,OS_8,GetByteLoc(left.location,0),NR_A);
|
||||||
|
//cg.a_op_loc_reg(current_asmdata.CurrAsmList,OP_SUB,OS_8,GetByteLoc(right.location,0),NR_A);
|
||||||
|
|
||||||
//tmpreg1:=left.location.register;
|
//tmpreg1:=left.location.register;
|
||||||
//tmpreg2:=right.location.register;
|
//tmpreg2:=right.location.register;
|
||||||
|
Loading…
Reference in New Issue
Block a user