private static void PrintCaseStatements(TextWriter output, int branchCount, int value, int off)
{
for (var i = branchCount; i > 0; i >>= 1)
{
if ((i & value) != 0)
{
switch (i)
{
case 32:
if (gEnableAvx) output.WriteLine("\t_memcpy32_avx(dst + {0}, src + {0});", off);
else output.WriteLine("\t_memcpy32_sse2(dst + {0}, src + {0});", off);
break;
case 16:
output.WriteLine("\t_memcpy16_sse2(dst + {0}, src + {0});", off);
break;
case 8:
output.WriteLine("\t*reinterpret_cast<uint64_t*>(dst + {0}) = *reinterpret_cast<uint64_t const*>(src + {0});", off);
break;
case 4:
output.WriteLine("\t*reinterpret_cast<uint32_t*>(dst + {0}) = *reinterpret_cast<uint32_t const*>(src + {0});", off);
break;
case 2:
output.WriteLine("\t*reinterpret_cast<uint16_t*>(dst + {0}) = *reinterpret_cast<uint16_t const*>(src + {0});", off);
break;
case 1:
output.WriteLine("\tdst[{0}] = src[{0}];", off);
break;
}
off += i;
}
}
}