Author: zoltan
Date: 2008-02-13 16:39:25 -0500 (Wed, 13 Feb 2008)
New Revision: 95600

Modified:
   trunk/mcs/class/System/System.Text.RegularExpressions/CILCompiler.cs
   trunk/mcs/class/System/System.Text.RegularExpressions/ChangeLog
Log:
2008-02-13  Zoltan Varga  <[EMAIL PROTECTED]>

        * CILCompiler.cs: Restructure some code to avoid a branch inside a loop.


Modified: trunk/mcs/class/System/System.Text.RegularExpressions/CILCompiler.cs
===================================================================
--- trunk/mcs/class/System/System.Text.RegularExpressions/CILCompiler.cs        
2008-02-13 21:21:39 UTC (rev 95599)
+++ trunk/mcs/class/System/System.Text.RegularExpressions/CILCompiler.cs        
2008-02-13 21:39:25 UTC (rev 95600)
@@ -202,21 +202,11 @@
                                                ilgen.Emit (OpCodes.Callvirt, 
typeof (string).GetMethod ("get_Chars"));
                                                ilgen.Emit (OpCodes.Conv_I4);
                                                ilgen.Emit (OpCodes.Ldc_I4, 
(int)program [pc + 1]);
-                                               ilgen.Emit (OpCodes.Bne_Un, l3);
+                                               ilgen.Emit (OpCodes.Beq, l3);
 
-                                               //    match_start = strpos;
-                                               ilgen.Emit (OpCodes.Ldarg_0);
-                                               ilgen.Emit (OpCodes.Ldarg_1);
-                                               ilgen.Emit (OpCodes.Stfld, 
fi_match_start);
-                                               //    strpos_result = strpos + 
1;
-                                               ilgen.Emit (OpCodes.Ldarg_1);
-                                               ilgen.Emit (OpCodes.Ldc_I4_1);
-                                               ilgen.Emit (OpCodes.Add);
-                                               ilgen.Emit (OpCodes.Stloc, 
frame.local_strpos_res);
-                                               //    return true;
-                                               ilgen.Emit (OpCodes.Br, 
frame.label_pass);
+                                               // The true case is done after 
the loop
+
                                                //  }
-                                               ilgen.MarkLabel (l3);
                                                //  strpos++;
                                                ilgen.Emit (OpCodes.Ldarg_1);
                                                ilgen.Emit (OpCodes.Ldc_I4_1);
@@ -230,6 +220,21 @@
 
                                                //return false;
                                                ilgen.Emit (OpCodes.Br, 
frame.label_fail);
+
+                                               // True case
+                                               ilgen.MarkLabel (l3);
+                                               //    match_start = strpos;
+                                               ilgen.Emit (OpCodes.Ldarg_0);
+                                               ilgen.Emit (OpCodes.Ldarg_1);
+                                               ilgen.Emit (OpCodes.Stfld, 
fi_match_start);
+                                               //    strpos_result = strpos + 
1;
+                                               ilgen.Emit (OpCodes.Ldarg_1);
+                                               ilgen.Emit (OpCodes.Ldc_I4_1);
+                                               ilgen.Emit (OpCodes.Add);
+                                               ilgen.Emit (OpCodes.Stloc, 
frame.local_strpos_res);
+                                               //    return true;
+                                               ilgen.Emit (OpCodes.Br, 
frame.label_pass);
+
                                        } else {
                                                // General case
 

Modified: trunk/mcs/class/System/System.Text.RegularExpressions/ChangeLog
===================================================================
--- trunk/mcs/class/System/System.Text.RegularExpressions/ChangeLog     
2008-02-13 21:21:39 UTC (rev 95599)
+++ trunk/mcs/class/System/System.Text.RegularExpressions/ChangeLog     
2008-02-13 21:39:25 UTC (rev 95600)
@@ -1,7 +1,9 @@
 2008-02-13  Zoltan Varga  <[EMAIL PROTECTED]>
 
+       * CILCompiler.cs: Restructure some code to avoid a branch inside a loop.
+       
        * CILCompiler.cs: Fix the unsafe string matching code.
-       
+
        * CILCompiler.cs: Improved version which emits only one method in most 
cases.
 
        * CILCompiler.cs: Fix some comments.

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to