فهرست منبع

+ sanity checks in mips and sparc register allocator

florian 3 سال پیش
والد
کامیت
03f4685455
2فایلهای تغییر یافته به همراه4 افزوده شده و 4 حذف شده
  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

@@ -207,7 +207,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
@@ -217,7 +217,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