70 lines
2.0 KiB
C#
70 lines
2.0 KiB
C#
namespace ARMeilleure.Common
|
|
{
|
|
public static class AddressTablePresets
|
|
{
|
|
private static readonly AddressTableLevel[] _levels64Bit =
|
|
[
|
|
new(31, 17),
|
|
new(23, 8),
|
|
new(15, 8),
|
|
new( 7, 8),
|
|
new( 2, 5)
|
|
];
|
|
|
|
private static readonly AddressTableLevel[] _levels32Bit =
|
|
[
|
|
new(31, 17),
|
|
new(23, 8),
|
|
new(15, 8),
|
|
new( 7, 8),
|
|
new( 1, 6)
|
|
];
|
|
|
|
private static readonly AddressTableLevel[] _levels64BitSparseTiny =
|
|
[
|
|
new( 11, 28),
|
|
new( 2, 9)
|
|
];
|
|
|
|
private static readonly AddressTableLevel[] _levels32BitSparseTiny =
|
|
[
|
|
new( 10, 22),
|
|
new( 1, 9)
|
|
];
|
|
|
|
private static readonly AddressTableLevel[] _levels64BitSparseGiant =
|
|
[
|
|
new( 38, 1),
|
|
new( 2, 36)
|
|
];
|
|
|
|
private static readonly AddressTableLevel[] _levels32BitSparseGiant =
|
|
[
|
|
new( 31, 1),
|
|
new( 1, 30)
|
|
];
|
|
|
|
//high power will run worse on DDR3 systems and some DDR4 systems due to the higher ram utilization
|
|
//low power will never run worse than non-sparse, but for most systems it won't be necessary
|
|
//high power is always used, but I've left low power in here for future reference
|
|
public static AddressTableLevel[] GetArmPreset(bool for64Bits, bool sparse, bool lowPower = false)
|
|
{
|
|
if (sparse)
|
|
{
|
|
if (lowPower)
|
|
{
|
|
return for64Bits ? _levels64BitSparseTiny : _levels32BitSparseTiny;
|
|
}
|
|
else
|
|
{
|
|
return for64Bits ? _levels64BitSparseGiant : _levels32BitSparseGiant;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
return for64Bits ? _levels64Bit : _levels32Bit;
|
|
}
|
|
}
|
|
}
|
|
}
|