Browse Source

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 -
Károly Balogh 9 years ago
parent
commit
c82328e3fd
1 changed files with 11 additions and 3 deletions
  1. 11 3
      compiler/m68k/cgcpu.pas

+ 11 - 3
compiler/m68k/cgcpu.pas

@@ -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                                    }
 {****************************************************************************}
 {****************************************************************************}