浏览代码

Generate error if CR field of C var is zero, as it leads to invalid instruction for conditional branching

git-svn-id: trunk@38494 -
pierre 7 年之前
父节点
当前提交
9e3a6368cb
共有 1 个文件被更改,包括 5 次插入1 次删除
  1. 5 1
      compiler/ppcgen/agppcgas.pas

+ 5 - 1
compiler/ppcgen/agppcgas.pas

@@ -315,7 +315,11 @@ unit agppcgas;
                   end;
                   end;
                   case c.cond of
                   case c.cond of
                     C_LT..C_NU:
                     C_LT..C_NU:
-                      cond2str := tempstr+gas_regname(newreg(R_SPECIALREGISTER,c.cr,R_SUBWHOLE));
+                      begin
+                        if byte(c.cr)=0 then
+                          Comment(V_error,'Wrong use of whole CR register for '+tempstr);
+                        cond2str := tempstr+gas_regname(newreg(R_SPECIALREGISTER,c.cr,R_SUBWHOLE));
+                      end;
                     C_T,C_F,C_DNZT,C_DNZF,C_DZT,C_DZF:
                     C_T,C_F,C_DNZT,C_DNZF,C_DZT,C_DZF:
                       cond2str := tempstr+tostr(c.crbit);
                       cond2str := tempstr+tostr(c.crbit);
                     else
                     else