42 lines
1.6 KiB
C#
42 lines
1.6 KiB
C#
using ARMeilleure.Common;
|
|
using System;
|
|
using System.Runtime.CompilerServices;
|
|
|
|
namespace ARMeilleure
|
|
{
|
|
static class Allocators
|
|
{
|
|
[ThreadStatic] private static ArenaAllocator _default;
|
|
[ThreadStatic] private static ArenaAllocator _operands;
|
|
[ThreadStatic] private static ArenaAllocator _operations;
|
|
[ThreadStatic] private static ArenaAllocator _references;
|
|
[ThreadStatic] private static ArenaAllocator _liveRanges;
|
|
[ThreadStatic] private static ArenaAllocator _liveIntervals;
|
|
|
|
public static ArenaAllocator Default => GetAllocator(ref _default, 256 * 1024, 4);
|
|
public static ArenaAllocator Operands => GetAllocator(ref _operands, 64 * 1024, 8);
|
|
public static ArenaAllocator Operations => GetAllocator(ref _operations, 64 * 1024, 8);
|
|
public static ArenaAllocator References => GetAllocator(ref _references, 64 * 1024, 8);
|
|
public static ArenaAllocator LiveRanges => GetAllocator(ref _liveRanges, 64 * 1024, 8);
|
|
public static ArenaAllocator LiveIntervals => GetAllocator(ref _liveIntervals, 64 * 1024, 8);
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
private static ArenaAllocator GetAllocator(ref ArenaAllocator alloc, uint pageSize, uint pageCount)
|
|
{
|
|
if (alloc == null)
|
|
{
|
|
alloc = new ArenaAllocator(pageSize, pageCount);
|
|
}
|
|
|
|
return alloc;
|
|
}
|
|
|
|
public static void ResetAll()
|
|
{
|
|
Default.Reset();
|
|
Operands.Reset();
|
|
Operations.Reset();
|
|
References.Reset();
|
|
}
|
|
}
|
|
}
|