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