| 123456789101112131415161718192021222324252627282930313233343536373839404142 |
- 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();
- }
- }
- }
|