speed up overall load speed of N64 text savestates (uncommonly used) by 25%

This commit is contained in:
goyuken 2014-06-13 19:32:36 +00:00
parent 124afa8f10
commit d501a1cf71
1 changed files with 14 additions and 3 deletions

View File

@ -363,11 +363,22 @@ namespace BizHawk.Common
}
}
public static void ReadFromHexFast(this byte[] buffer, string hex)
public static unsafe void ReadFromHexFast(this byte[] buffer, string hex)
{
for (int i = 0; i < buffer.Length && i * 2 < hex.Length; i++)
if (buffer.Length * 2 != hex.Length)
throw new Exception("Data size mismatch");
int count = buffer.Length;
fixed (byte* _dst = buffer)
fixed (char* _src = hex)
{
buffer[i] = (byte)(Hex2Int(hex[i * 2]) * 16 + Hex2Int(hex[i * 2 + 1]));
byte* dst = _dst;
char* src = _src;
while (count > 0)
{
// in my tests, replacing Hex2Int() with a 256 entry LUT slowed things down slightly
*dst = (byte)(Hex2Int(*src++) << 4 | Hex2Int(*src++));
count--;
}
}
}