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