forked from Mirror/Ryujinx
5e0f8e8738
* Implement JIT Arm64 backend * PPTC version bump * Address some feedback from Arm64 JIT PR * Address even more PR feedback * Remove unused IsPageAligned function * Sync Qc flag before calls * Fix comment and remove unused enum * Address riperiperi PR feedback * Delete Breakpoint IR instruction that was only implemented for Arm64
65 lines
No EOL
1.9 KiB
C#
65 lines
No EOL
1.9 KiB
C#
using System;
|
|
|
|
namespace ARMeilleure.IntermediateRepresentation
|
|
{
|
|
enum OperandType
|
|
{
|
|
None,
|
|
I32,
|
|
I64,
|
|
FP32,
|
|
FP64,
|
|
V128
|
|
}
|
|
|
|
static class OperandTypeExtensions
|
|
{
|
|
public static bool IsInteger(this OperandType type)
|
|
{
|
|
return type == OperandType.I32 ||
|
|
type == OperandType.I64;
|
|
}
|
|
|
|
public static RegisterType ToRegisterType(this OperandType type)
|
|
{
|
|
switch (type)
|
|
{
|
|
case OperandType.FP32: return RegisterType.Vector;
|
|
case OperandType.FP64: return RegisterType.Vector;
|
|
case OperandType.I32: return RegisterType.Integer;
|
|
case OperandType.I64: return RegisterType.Integer;
|
|
case OperandType.V128: return RegisterType.Vector;
|
|
}
|
|
|
|
throw new InvalidOperationException($"Invalid operand type \"{type}\".");
|
|
}
|
|
|
|
public static int GetSizeInBytes(this OperandType type)
|
|
{
|
|
switch (type)
|
|
{
|
|
case OperandType.FP32: return 4;
|
|
case OperandType.FP64: return 8;
|
|
case OperandType.I32: return 4;
|
|
case OperandType.I64: return 8;
|
|
case OperandType.V128: return 16;
|
|
}
|
|
|
|
throw new InvalidOperationException($"Invalid operand type \"{type}\".");
|
|
}
|
|
|
|
public static int GetSizeInBytesLog2(this OperandType type)
|
|
{
|
|
switch (type)
|
|
{
|
|
case OperandType.FP32: return 2;
|
|
case OperandType.FP64: return 3;
|
|
case OperandType.I32: return 2;
|
|
case OperandType.I64: return 3;
|
|
case OperandType.V128: return 4;
|
|
}
|
|
|
|
throw new InvalidOperationException($"Invalid operand type \"{type}\".");
|
|
}
|
|
}
|
|
} |