浏览代码

* optimize TAOptBase.SuperRegistersEqual

git-svn-id: trunk@43337 -
florian 5 年之前
父节点
当前提交
59d300fc6e
共有 1 个文件被更改,包括 10 次插入4 次删除
  1. 10 4
      compiler/aoptbase.pas

+ 10 - 4
compiler/aoptbase.pas

@@ -104,7 +104,7 @@ unit aoptbase;
 
 
         { compares reg1 and reg2 having the same type and being the same super registers
         { compares reg1 and reg2 having the same type and being the same super registers
           so the register size is neglected }
           so the register size is neglected }
-        function SuperRegistersEqual(reg1,reg2 : TRegister) : Boolean;
+        function SuperRegistersEqual(reg1,reg2 : TRegister) : Boolean;{$ifdef USEINLINE}inline;{$endif}
     end;
     end;
 
 
     function labelCanBeSkipped(p: tai_label): boolean;
     function labelCanBeSkipped(p: tai_label): boolean;
@@ -316,10 +316,16 @@ unit aoptbase;
     end;
     end;
 
 
 
 
-  function TAOptBase.SuperRegistersEqual(reg1,reg2 : TRegister) : Boolean;
+  function TAOptBase.SuperRegistersEqual(reg1,reg2 : TRegister) : Boolean;{$ifdef USEINLINE}inline;{$endif}
   Begin
   Begin
-    Result:=(getregtype(reg1) = getregtype(reg2)) and
-            (getsupreg(reg1) = getsupreg(Reg2));
+    { Do an optimized version of
+
+      Result:=(getregtype(reg1) = getregtype(reg2)) and
+      (getsupreg(reg1) = getsupreg(Reg2));
+
+      as SuperRegistersEqual is used a lot
+    }
+    Result:=(DWord(reg1) and $ff00ffff)=(DWord(reg2) and $ff00ffff);
   end;
   end;
 
 
   { ******************* Processor dependent stuff *************************** }
   { ******************* Processor dependent stuff *************************** }