--- /dev/null
+using System;
+class T {
+ static void Main () {
+ int i = Environment.TickCount;
+ new T ().X ();
+ Console.WriteLine (Environment.TickCount - i);
+ }
+
+ int [] window = new int [9];
+
+ void X () {
+ int scan = 0, match = 0;
+ for (int i = 0; i < 5000000; i ++) {
+ if (window[++scan] == window[++match] &&
+ window[++scan] == window[++match] &&
+ window[++scan] == window[++match] &&
+ window[++scan] == window[++match] &&
+ window[++scan] == window[++match] &&
+ window[++scan] == window[++match] &&
+ window[++scan] == window[++match] &&
+ window[++scan] == window[++match]) {
+ scan = match = 0;
+ }
+ }
+ }
+}
\ No newline at end of file
+//
+// Idealy, we would fold the operations from a...h into one long xor chain,
+// we could then commute the xor operation.
+//
+// More realisticly, we should assign each of a...h to one reg, rather than making
+// the two swap between two registers:
+// (stind.i4 regvar[%edi] (xor (ldind.i4 regoffset[-0x18(%ebp)]) iconst[1]))
+// (stind.i4 regvar[%esi] (xor (ldind.i4 regvar[%edi]) iconst[2]))
+// (stind.i4 regvar[%edi] (xor (ldind.i4 regvar[%esi]) iconst[3]))
+// (stind.i4 regvar[%esi] (xor (ldind.i4 regvar[%edi]) iconst[4]))
+//
+
class T {
static void Main ()
{
--- /dev/null
+//
+// You need a deadce to get rid of the initlocals statements,
+// which make all of the variables overlap in their live ranges.
+//
+
+using System;
+class T {
+ static void Main () {
+ int i = Environment.TickCount;
+ new T ().X ();
+ Console.WriteLine (Environment.TickCount - i);
+ }
+
+ void X () {
+ int a = 0;
+ for (int x = 0; x < 1000; x ++) {
+ for (int i = 0; i < 10000; i ++) a ++;
+ for (int i = 0; i < 10000; i ++) a ++;
+ for (int i = 0; i < 10000; i ++) a ++;
+ for (int i = 0; i < 10000; i ++) a ++;
+ for (int i = 0; i < 10000; i ++) a ++;
+ for (int i = 0; i < 10000; i ++) a ++;
+ for (int i = 0; i < 10000; i ++) a ++;
+ for (int i = 0; i < 10000; i ++) a ++;
+ for (int i = 0; i < 10000; i ++) a ++;
+ for (int i = 0; i < 10000; i ++) a ++;
+ for (int i = 0; i < 10000; i ++) a ++;
+ for (int i = 0; i < 10000; i ++) a ++;
+ for (int i = 0; i < 10000; i ++) a ++;
+ for (int i = 0; i < 10000; i ++) a ++;
+ for (int i = 0; i < 10000; i ++) a ++;
+ for (int i = 0; i < 10000; i ++) a ++;
+ for (int i = 0; i < 10000; i ++) a ++;
+ for (int i = 0; i < 10000; i ++) a ++;
+ for (int i = 0; i < 10000; i ++) a ++;
+ for (int i = 0; i < 10000; i ++) a ++;
+ for (int i = 0; i < 10000; i ++) a ++;
+ for (int i = 0; i < 10000; i ++) a ++;
+ for (int i = 0; i < 10000; i ++) a ++;
+ for (int i = 0; i < 10000; i ++) a ++;
+ for (int i = 0; i < 10000; i ++) a ++;
+ for (int i = 0; i < 10000; i ++) a ++;
+ for (int i = 0; i < 10000; i ++) a ++;
+ for (int i = 0; i < 10000; i ++) a ++;
+ for (int i = 0; i < 10000; i ++) a ++;
+ for (int i = 0; i < 10000; i ++) a ++;
+ for (int i = 0; i < 10000; i ++) a ++;
+ for (int i = 0; i < 10000; i ++) a ++;
+ for (int i = 0; i < 10000; i ++) a ++;
+ for (int i = 0; i < 10000; i ++) a ++;
+ for (int i = 0; i < 10000; i ++) a ++;
+ for (int i = 0; i < 10000; i ++) a ++;
+ for (int i = 0; i < 10000; i ++) a ++;
+ for (int i = 0; i < 10000; i ++) a ++;
+ for (int i = 0; i < 10000; i ++) a ++;
+ for (int i = 0; i < 10000; i ++) a ++;
+ for (int i = 0; i < 10000; i ++) a ++;
+ for (int i = 0; i < 10000; i ++) a ++;
+ for (int i = 0; i < 10000; i ++) a ++;
+ for (int i = 0; i < 10000; i ++) a ++;
+ for (int i = 0; i < 10000; i ++) a ++;
+ for (int i = 0; i < 10000; i ++) a ++;
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+//
+// We get stuff like:
+// 48: 8b c3 mov eax,ebx
+// 4a: 8b cf mov ecx,edi
+// 4c: 0b c1 or eax,ecx
+// 4e: 8b d8 mov ebx,eax
+//
+
+using System;
+class T {
+ static void Main () {
+ int i = Environment.TickCount;
+ new T ().X ();
+ Console.WriteLine (Environment.TickCount - i);
+ }
+
+ void X () {
+ int a = 0, b = 0, c = 0, d = 0;
+ for (int i = 0; i < 50000000; i ++) {
+
+
+ a |= b;
+ b |= c;
+ c |= d;
+ b |= d;
+
+ a ^= b;
+ b ^= c;
+ c ^= d;
+ b ^= d;
+
+ a &= b;
+ b &= c;
+ c &= d;
+ b &= d;
+
+ a += b;
+ b += c;
+ c += d;
+ b += d;
+ }
+ }
+}
\ No newline at end of file