aboutsummaryrefslogtreecommitdiff
path: root/src/ARMeilleure/CodeGen/RegisterAllocators/UseList.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/ARMeilleure/CodeGen/RegisterAllocators/UseList.cs')
-rw-r--r--src/ARMeilleure/CodeGen/RegisterAllocators/UseList.cs36
1 files changed, 19 insertions, 17 deletions
diff --git a/src/ARMeilleure/CodeGen/RegisterAllocators/UseList.cs b/src/ARMeilleure/CodeGen/RegisterAllocators/UseList.cs
index c89f0854..a945eccf 100644
--- a/src/ARMeilleure/CodeGen/RegisterAllocators/UseList.cs
+++ b/src/ARMeilleure/CodeGen/RegisterAllocators/UseList.cs
@@ -6,15 +6,15 @@ namespace ARMeilleure.CodeGen.RegisterAllocators
{
private int* _items;
private int _capacity;
- private int _count;
- public int Count => _count;
- public int FirstUse => _count > 0 ? _items[_count - 1] : LiveInterval.NotFound;
- public Span<int> Span => new(_items, _count);
+ public int Count { get; private set; }
+
+ public readonly int FirstUse => Count > 0 ? _items[Count - 1] : LiveInterval.NotFound;
+ public readonly Span<int> Span => new(_items, Count);
public void Add(int position)
{
- if (_count + 1 > _capacity)
+ if (Count + 1 > _capacity)
{
var oldSpan = Span;
@@ -28,7 +28,7 @@ namespace ARMeilleure.CodeGen.RegisterAllocators
// Use positions are usually inserted in descending order, so inserting in descending order is faster,
// since the number of half exchanges is reduced.
- int i = _count - 1;
+ int i = Count - 1;
while (i >= 0 && _items[i] < position)
{
@@ -36,19 +36,19 @@ namespace ARMeilleure.CodeGen.RegisterAllocators
}
_items[i + 1] = position;
- _count++;
+ Count++;
}
- public int NextUse(int position)
+ public readonly int NextUse(int position)
{
int index = NextUseIndex(position);
return index != LiveInterval.NotFound ? _items[index] : LiveInterval.NotFound;
}
- public int NextUseIndex(int position)
+ public readonly int NextUseIndex(int position)
{
- int i = _count - 1;
+ int i = Count - 1;
if (i == -1 || position > _items[0])
{
@@ -69,16 +69,18 @@ namespace ARMeilleure.CodeGen.RegisterAllocators
// Since the list is in descending order, the new split list takes the front of the list and the current
// list takes the back of the list.
- UseList result = new();
- result._count = index + 1;
- result._capacity = result._count;
+ UseList result = new()
+ {
+ Count = index + 1,
+ };
+ result._capacity = result.Count;
result._items = _items;
- _count = _count - result._count;
- _capacity = _count;
- _items = _items + result._count;
+ Count -= result.Count;
+ _capacity = Count;
+ _items += result.Count;
return result;
}
}
-} \ No newline at end of file
+}