forked from MeloNX/MeloNX
39 lines
1.1 KiB
C#
39 lines
1.1 KiB
C#
using Ryujinx.Cpu.LightningJit.CodeGen;
|
|
using System;
|
|
|
|
namespace Ryujinx.Cpu.LightningJit.Arm32
|
|
{
|
|
struct ScopedRegister : IDisposable
|
|
{
|
|
private readonly RegisterAllocator _registerAllocator;
|
|
private readonly Operand _operand;
|
|
private readonly bool _isAllocated;
|
|
|
|
public readonly Operand Operand => _operand;
|
|
public readonly bool IsAllocated => _isAllocated;
|
|
|
|
public ScopedRegister(RegisterAllocator registerAllocator, Operand operand, bool isAllocated = true)
|
|
{
|
|
_registerAllocator = registerAllocator;
|
|
_operand = operand;
|
|
_isAllocated = isAllocated;
|
|
}
|
|
|
|
public readonly void Dispose()
|
|
{
|
|
if (!_isAllocated)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (_operand.Type.IsInteger())
|
|
{
|
|
_registerAllocator.FreeTempGprRegister(_operand.AsInt32());
|
|
}
|
|
else
|
|
{
|
|
_registerAllocator.FreeTempFpSimdRegister(_operand.AsInt32());
|
|
}
|
|
}
|
|
}
|
|
} |