Browse Source

* Micro-optimizations

daniel 21 years ago
parent
commit
b23904af2a
1 changed files with 70 additions and 66 deletions
  1. 70 66
      compiler/rautils.pas

+ 70 - 66
compiler/rautils.pas

@@ -735,22 +735,24 @@ begin
 end;
 
 
-Function TOperand.SetupResult:boolean;
-Begin
+function TOperand.SetupResult:boolean;
+
+begin
   SetupResult:=false;
   { replace by correct offset. }
-  if (not is_void(current_procinfo.procdef.rettype.def)) then
-   begin
-     if (m_tp7 in aktmodeswitches) and
-        (not paramanager.ret_in_param(current_procinfo.procdef.rettype.def,current_procinfo.procdef.proccalloption)) then
-       begin
-         Message(asmr_e_cannot_use_RESULT_here);
-         exit;
-       end;
-     SetupResult:=setupvar('result',false)
-   end
-  else
-   Message(asmr_e_void_function);
+  with current_procinfo.procdef do
+    if (not is_void(rettype.def)) then
+      begin
+        if (m_tp7 in aktmodeswitches) and
+          (not paramanager.ret_in_param(rettype.def,proccalloption)) then
+          begin
+            message(asmr_e_cannot_use_RESULT_here);
+            exit;
+          end;
+        SetupResult:=setupvar('result',false)
+      end
+    else
+      message(asmr_e_void_function);
 end;
 
 
@@ -1111,25 +1113,26 @@ end;
       ai.Ops:=Ops;
       ai.Allocate_oper(Ops);
       for i:=1 to Ops do
-       begin
-         case operands[i].opr.typ of
-           OPR_CONSTANT :
-             ai.loadconst(i-1,aword(operands[i].opr.val));
-           OPR_REGISTER:
-             ai.loadreg(i-1,operands[i].opr.reg);
-           OPR_SYMBOL:
-             ai.loadsymbol(i-1,operands[i].opr.symbol,operands[i].opr.symofs);
-           OPR_LOCAL :
-             ai.loadlocal(i-1,operands[i].opr.localsym,operands[i].opr.localsymofs,operands[i].opr.localindexreg,
-                          operands[i].opr.localscale,operands[i].opr.localgetoffset);
-           OPR_REFERENCE:
-             ai.loadref(i-1,operands[i].opr.ref);
+        with operands[i].opr do
+          begin
+            case typ of
+              OPR_CONSTANT :
+                ai.loadconst(i-1,aword(val));
+              OPR_REGISTER:
+                ai.loadreg(i-1,reg);
+              OPR_SYMBOL:
+                ai.loadsymbol(i-1,symbol,symofs);
+              OPR_LOCAL :
+                ai.loadlocal(i-1,localsym,localsymofs,localindexreg,
+                             localscale,localgetoffset);
+              OPR_REFERENCE:
+                ai.loadref(i-1,ref);
 {$ifdef ARM}
-           OPR_REGSET:
-             ai.loadregset(i-1,operands[i].opr.regset);
+              OPR_REGSET:
+                ai.loadregset(i-1,regset);
 {$endif ARM}
-         end;
-       end;
+            end;
+          end;
      ai.SetCondition(condition);
      { Concat the opcode or give an error }
       if assigned(ai) then
@@ -1357,32 +1360,29 @@ Begin
      { we can start with a var,type,typedconst }
      case sym.typ of
        varsym :
-         begin
-           case tvarsym(sym).vartype.def.deftype of
+         with Tvarsym(sym).vartype do
+           case def.deftype of
              recorddef :
-               st:=trecorddef(tvarsym(sym).vartype.def).symtable;
+               st:=trecorddef(def).symtable;
              objectdef :
-               st:=tobjectdef(tvarsym(sym).vartype.def).symtable;
+               st:=tobjectdef(def).symtable;
            end;
-         end;
        typesym :
-         begin
-           case ttypesym(sym).restype.def.deftype of
+		 with Ttypesym(sym).restype do
+           case def.deftype of
              recorddef :
-               st:=trecorddef(ttypesym(sym).restype.def).symtable;
+               st:=trecorddef(def).symtable;
              objectdef :
-               st:=tobjectdef(ttypesym(sym).restype.def).symtable;
+               st:=tobjectdef(def).symtable;
            end;
-         end;
        typedconstsym :
-         begin
-           case ttypedconstsym(sym).typedconsttype.def.deftype of
+         with Ttypedconstsym(sym).typedconsttype do
+           case def.deftype of
              recorddef :
-               st:=trecorddef(ttypedconstsym(sym).typedconsttype.def).symtable;
+               st:=trecorddef(def).symtable;
              objectdef :
-               st:=tobjectdef(ttypedconstsym(sym).typedconsttype.def).symtable;
+               st:=tobjectdef(def).symtable;
            end;
-         end;
      end;
    end;
   { now walk all recordsymtables }
@@ -1406,26 +1406,28 @@ Begin
      st:=nil;
      case sym.typ of
        varsym :
-         begin
-           inc(Offset,tvarsym(sym).fieldoffset);
-           Size:=tvarsym(sym).getsize;
-           case tvarsym(sym).vartype.def.deftype of
-             arraydef :
-               begin
-                 { for arrays try to get the element size, take care of
-                   multiple indexes }
-                 harrdef:=tarraydef(tvarsym(sym).vartype.def);
-                 while assigned(harrdef.elementtype.def) and
-                       (harrdef.elementtype.def.deftype=arraydef) do
-                  harrdef:=tarraydef(harrdef.elementtype.def);
-                 size:=harrdef.elesize;
+         with Tvarsym(sym) do
+           begin
+             inc(Offset,fieldoffset);
+             size:=getsize;
+             with vartype do
+               case def.deftype of
+                 arraydef :
+                   begin
+                     { for arrays try to get the element size, take care of
+                       multiple indexes }
+                     harrdef:=tarraydef(def);
+                     while assigned(harrdef.elementtype.def) and
+                           (harrdef.elementtype.def.deftype=arraydef) do
+                      harrdef:=tarraydef(harrdef.elementtype.def);
+                     size:=harrdef.elesize;
+                   end;
+                 recorddef :
+                   st:=trecorddef(def).symtable;
+                 objectdef :
+                   st:=tobjectdef(def).symtable;
                end;
-             recorddef :
-               st:=trecorddef(tvarsym(sym).vartype.def).symtable;
-             objectdef :
-               st:=tobjectdef(tvarsym(sym).vartype.def).symtable;
            end;
-         end;
      end;
    end;
    GetRecordOffsetSize:=(s='');
@@ -1454,7 +1456,6 @@ Begin
         else
          tlabelsym(sym).used:=true;
         SearchLabel:=true;
-        exit;
       end;
   end;
 end;
@@ -1625,7 +1626,10 @@ end;
 end.
 {
   $Log$
-  Revision 1.80  2003-11-30 10:15:42  jonas
+  Revision 1.81  2004-02-21 21:04:09  daniel
+    * Micro-optimizations
+
+  Revision 1.80  2003/11/30 10:15:42  jonas
     * fixed compilation for non-x86
 
   Revision 1.79  2003/11/21 16:29:26  florian