diff --git a/compiler/m68k/cgcpu.pas b/compiler/m68k/cgcpu.pas index 265df8a39a..4514bcd7d1 100644 --- a/compiler/m68k/cgcpu.pas +++ b/compiler/m68k/cgcpu.pas @@ -99,6 +99,7 @@ unit cgcpu; protected 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 check_register_size(size:tcgsize;reg:tregister); private procedure a_jmp_cond(list : TAsmList;cond : TOpCmp;l: tasmlabel); end; @@ -940,7 +941,7 @@ unit cgcpu; end else begin - if (reg1<>reg2) then + if not isregoverlap(reg1,reg2) then begin instr:=taicpu.op_reg_reg(A_MOVE,opsize,reg1,reg2); add_move_instruction(instr); @@ -1871,7 +1872,7 @@ unit cgcpu; 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 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)}); fpuregs:=fpuregs + [saved_fpu_registers[r]]; end; @@ -1964,7 +1965,7 @@ unit cgcpu; if saved_fpu_registers[r] in rg[R_FPUREGISTER].used_in_proc then begin 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 } a_reg_alloc(list,hfreg); fpuregs:=fpuregs + [saved_fpu_registers[r]]; @@ -2168,6 +2169,13 @@ unit cgcpu; end; + procedure tcg68k.check_register_size(size:tcgsize;reg:tregister); + begin + if TCGSize2OpSize[size]<>TCGSize2OpSize[reg_cgsize(reg)] then + internalerror(201512131); + end; + + {****************************************************************************} { TCG64F68K } {****************************************************************************}