Browse Source

+ sanity checks in mips and sparc register allocator

(cherry picked from commit 03f468545597e3edbde86b903a88a1dc9da9b1e9)
florian 3 years ago
parent
commit
56a99d2512
2 changed files with 4 additions and 4 deletions
  1. 2 2
      compiler/mips/rgcpu.pas
  2. 2 2
      compiler/sparcgen/rgcpu.pas

+ 2 - 2
compiler/mips/rgcpu.pas

@@ -150,7 +150,7 @@ implementation
             else
               InternalError(2013061003);
           end;
-        if get_alias(getsupreg(instr.oper[1]^.reg))=orgreg then
+        if (getregtype(instr.oper[1]^.reg)=regtype) and  (get_alias(getsupreg(instr.oper[1]^.reg))=orgreg) then
           begin
             case instr.opcode of
               A_MOVE:  instr.opcode:=A_LW;
@@ -160,7 +160,7 @@ implementation
               InternalError(2013061004);
             end;
           end
-        else if get_alias(getsupreg(instr.oper[0]^.reg))=orgreg then
+        else if (getregtype(instr.oper[0]^.reg)=regtype) and  (get_alias(getsupreg(instr.oper[0]^.reg))=orgreg) then
           begin
             case instr.opcode of
               A_MOVE:  instr.opcode:=A_SW;

+ 2 - 2
compiler/sparcgen/rgcpu.pas

@@ -205,7 +205,7 @@ implementation
            (getregtype(instr.oper[1]^.reg)<>regtype) then
           exit;
         opidx:=-1;
-        if get_alias(getsupreg(instr.oper[0]^.reg))=orgreg then
+        if (getregtype(instr.oper[0]^.reg)=regtype) and (get_alias(getsupreg(instr.oper[0]^.reg))=orgreg) then
           begin
             if (regtype=R_INTREGISTER) then
               instr.opcode:=A_LD_R
@@ -215,7 +215,7 @@ implementation
               instr.opcode:=A_LDDF;
             opidx:=0;
           end
-        else if get_alias(getsupreg(instr.oper[1]^.reg))=orgreg then
+        else if (getregtype(instr.oper[1]^.reg)=regtype) and (get_alias(getsupreg(instr.oper[1]^.reg))=orgreg) then
           begin
             if (regtype=R_INTREGISTER) then
               instr.opcode:=A_ST_R