mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-18 01:29:21 +02:00
m68k: implemented tcg68k.check_register_size for future use. use R_SUBNONE for FPU registers, because R_SUBWHOLE will change. use isregoverlap in a_load_reg_reg
git-svn-id: trunk@32658 -
This commit is contained in:
parent
001dfecdf5
commit
c82328e3fd
@ -99,6 +99,7 @@ unit cgcpu;
|
|||||||
protected
|
protected
|
||||||
procedure call_rtl_mul_const_reg(list:tasmlist;size:tcgsize;a:tcgint;reg:tregister;const name:string);
|
procedure call_rtl_mul_const_reg(list:tasmlist;size:tcgsize;a:tcgint;reg:tregister;const name:string);
|
||||||
procedure call_rtl_mul_reg_reg(list:tasmlist;reg1,reg2:tregister;const name:string);
|
procedure call_rtl_mul_reg_reg(list:tasmlist;reg1,reg2:tregister;const name:string);
|
||||||
|
procedure check_register_size(size:tcgsize;reg:tregister);
|
||||||
private
|
private
|
||||||
procedure a_jmp_cond(list : TAsmList;cond : TOpCmp;l: tasmlabel);
|
procedure a_jmp_cond(list : TAsmList;cond : TOpCmp;l: tasmlabel);
|
||||||
end;
|
end;
|
||||||
@ -940,7 +941,7 @@ unit cgcpu;
|
|||||||
end
|
end
|
||||||
else
|
else
|
||||||
begin
|
begin
|
||||||
if (reg1<>reg2) then
|
if not isregoverlap(reg1,reg2) then
|
||||||
begin
|
begin
|
||||||
instr:=taicpu.op_reg_reg(A_MOVE,opsize,reg1,reg2);
|
instr:=taicpu.op_reg_reg(A_MOVE,opsize,reg1,reg2);
|
||||||
add_move_instruction(instr);
|
add_move_instruction(instr);
|
||||||
@ -1871,7 +1872,7 @@ unit cgcpu;
|
|||||||
for r:=low(saved_fpu_registers) to high(saved_fpu_registers) do
|
for r:=low(saved_fpu_registers) to high(saved_fpu_registers) do
|
||||||
if saved_fpu_registers[r] in rg[R_FPUREGISTER].used_in_proc then
|
if saved_fpu_registers[r] in rg[R_FPUREGISTER].used_in_proc then
|
||||||
begin
|
begin
|
||||||
hfreg:=newreg(R_FPUREGISTER,saved_fpu_registers[r],R_SUBWHOLE);
|
hfreg:=newreg(R_FPUREGISTER,saved_fpu_registers[r],R_SUBNONE);
|
||||||
inc(fsize,12{sizeof(extended)});
|
inc(fsize,12{sizeof(extended)});
|
||||||
fpuregs:=fpuregs + [saved_fpu_registers[r]];
|
fpuregs:=fpuregs + [saved_fpu_registers[r]];
|
||||||
end;
|
end;
|
||||||
@ -1964,7 +1965,7 @@ unit cgcpu;
|
|||||||
if saved_fpu_registers[r] in rg[R_FPUREGISTER].used_in_proc then
|
if saved_fpu_registers[r] in rg[R_FPUREGISTER].used_in_proc then
|
||||||
begin
|
begin
|
||||||
inc(fsize,12{sizeof(extended)});
|
inc(fsize,12{sizeof(extended)});
|
||||||
hfreg:=newreg(R_FPUREGISTER,saved_fpu_registers[r],R_SUBWHOLE);
|
hfreg:=newreg(R_FPUREGISTER,saved_fpu_registers[r],R_SUBNONE);
|
||||||
{ Allocate register so the optimizer does not remove the load }
|
{ Allocate register so the optimizer does not remove the load }
|
||||||
a_reg_alloc(list,hfreg);
|
a_reg_alloc(list,hfreg);
|
||||||
fpuregs:=fpuregs + [saved_fpu_registers[r]];
|
fpuregs:=fpuregs + [saved_fpu_registers[r]];
|
||||||
@ -2168,6 +2169,13 @@ unit cgcpu;
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure tcg68k.check_register_size(size:tcgsize;reg:tregister);
|
||||||
|
begin
|
||||||
|
if TCGSize2OpSize[size]<>TCGSize2OpSize[reg_cgsize(reg)] then
|
||||||
|
internalerror(201512131);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
{****************************************************************************}
|
{****************************************************************************}
|
||||||
{ TCG64F68K }
|
{ TCG64F68K }
|
||||||
{****************************************************************************}
|
{****************************************************************************}
|
||||||
|
Loading…
Reference in New Issue
Block a user