 61634dd415
			
		
	
	
		61634dd415
		
			
		
	
	
	
	
		
			
			* Initial cache memory allocator implementation * Get rid of CallFlag * Perform cache cleanup on exit * Basic cache invalidation * Thats not how conditionals works in C# it seems * Set PTC version to PR number * Address PR feedback * Update InstEmitFlowHelper.cs * Flag clear on address is no longer needed * Do not include exit block in function size calculation * Dispose jump table * For future use * InternalVersion = 1519 (force retest). Co-authored-by: LDj3SNuD <35856442+LDj3SNuD@users.noreply.github.com>
		
			
				
	
	
		
			72 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using ARMeilleure.Common;
 | |
| using System.Collections.Generic;
 | |
| using System.Diagnostics;
 | |
| 
 | |
| namespace ARMeilleure.Translation.Cache
 | |
| {
 | |
|     class JumpTableEntryAllocator
 | |
|     {
 | |
|         private readonly BitMap _bitmap;
 | |
|         private int _freeHint;
 | |
| 
 | |
|         public JumpTableEntryAllocator()
 | |
|         {
 | |
|             _bitmap = new BitMap();
 | |
|         }
 | |
| 
 | |
|         public bool EntryIsValid(int entryIndex)
 | |
|         {
 | |
|             lock (_bitmap)
 | |
|             {
 | |
|                 return _bitmap.IsSet(entryIndex);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         public void SetEntry(int entryIndex)
 | |
|         {
 | |
|             lock (_bitmap)
 | |
|             {
 | |
|                 _bitmap.Set(entryIndex);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         public int AllocateEntry()
 | |
|         {
 | |
|             lock (_bitmap)
 | |
|             {
 | |
|                 int entryIndex;
 | |
| 
 | |
|                 if (!_bitmap.IsSet(_freeHint))
 | |
|                 {
 | |
|                     entryIndex = _freeHint;
 | |
|                 }
 | |
|                 else
 | |
|                 {
 | |
|                     entryIndex = _bitmap.FindFirstUnset();
 | |
|                 }
 | |
| 
 | |
|                 _freeHint = entryIndex + 1;
 | |
| 
 | |
|                 bool wasSet = _bitmap.Set(entryIndex);
 | |
|                 Debug.Assert(wasSet);
 | |
| 
 | |
|                 return entryIndex;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         public void FreeEntry(int entryIndex)
 | |
|         {
 | |
|             lock (_bitmap)
 | |
|             {
 | |
|                 _bitmap.Clear(entryIndex);
 | |
| 
 | |
|                 _freeHint = entryIndex;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         public IEnumerable<int> GetEntries()
 | |
|         {
 | |
|             return _bitmap;
 | |
|         }
 | |
|     }
 | |
| }
 |