I was messing around with the BitArray class (patch to follow) when i
realised that it might be faster to use unsafe code to swap the bytes. So i
did a test or two and it turns out that for longs it's faster to use unsafe
code and copy bytes around.

This makes SwapLong ~20% faster (0.2x faster).

Is it ok to commit?

Alan.
Index: C:/programming/mcs/class/System/System.Net/IPAddress.cs
===================================================================
--- C:/programming/mcs/class/System/System.Net/IPAddress.cs	(revision 74962)
+++ C:/programming/mcs/class/System/System.Net/IPAddress.cs	(working copy)
@@ -71,14 +71,20 @@
 
 		private static long SwapLong(long number)
 		{
-			return (((number >> 56) & 0xFF)
-				  | ((number >> 40) & 0xFF00)
-				  | ((number >> 24) & 0xFF0000)
-				  | ((number >> 08) & 0xFF000000)
-				  | ((number << 08) & 0xFF00000000)
-				  | ((number << 24) & 0xFF0000000000)
-				  | ((number << 40) & 0xFF000000000000)
-				  | ((number << 56)));
+			long result;
+			byte* rPtr = (byte*)&result;
+			byte* oPtr = (byte*)&number;
+
+			*(rPtr + 7) = *(oPtr + 0);
+			*(rPtr + 6) = *(oPtr + 1);
+			*(rPtr + 5) = *(oPtr + 2);
+			*(rPtr + 4) = *(oPtr + 3);
+			*(rPtr + 3) = *(oPtr + 4);
+			*(rPtr + 2) = *(oPtr + 5);
+			*(rPtr + 1) = *(oPtr + 6);
+			*(rPtr + 0) = *(oPtr + 7);
+
+			return result;
 		}
 
 		public static short HostToNetworkOrder(short host) {
_______________________________________________
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list

Reply via email to