Merge branch 'master' into xeyes

This commit is contained in:
Evan Husted
2025-01-26 17:33:58 -06:00
committed by GitHub
527 changed files with 7960 additions and 6917 deletions

View File

@@ -13,7 +13,7 @@ namespace ARMeilleure.CodeGen.Arm64
public static void RunPass(ControlFlowGraph cfg)
{
Dictionary<ulong, Operand> constants = new Dictionary<ulong, Operand>();
Dictionary<ulong, Operand> constants = new();
Operand GetConstantCopy(BasicBlock block, Operation operation, Operand source)
{

View File

@@ -42,7 +42,7 @@ namespace ARMeilleure.CodeGen.Arm64
{
Offset = offset;
Symbol = symbol;
LdrOffsets = new List<(Operand, int)>();
LdrOffsets = [];
}
}
@@ -266,7 +266,7 @@ namespace ARMeilleure.CodeGen.Arm64
}
else
{
relocInfo = new RelocInfo(Array.Empty<RelocEntry>());
relocInfo = new RelocInfo([]);
}
return (code, relocInfo);

View File

@@ -1079,7 +1079,7 @@ namespace ARMeilleure.CodeGen.Arm64
private static UnwindInfo WritePrologue(CodeGenContext context)
{
List<UnwindPushEntry> pushEntries = new();
List<UnwindPushEntry> pushEntries = [];
Operand rsp = Register(SpRegister);

View File

@@ -140,8 +140,8 @@ namespace ARMeilleure.CodeGen.Arm64
return false;
}
private static readonly string[] _sysctlNames = new string[]
{
private static readonly string[] _sysctlNames =
[
"hw.optional.floatingpoint",
"hw.optional.AdvSIMD",
"hw.optional.arm.FEAT_FP16",
@@ -150,8 +150,8 @@ namespace ARMeilleure.CodeGen.Arm64
"hw.optional.arm.FEAT_LSE",
"hw.optional.armv8_crc32",
"hw.optional.arm.FEAT_SHA1",
"hw.optional.arm.FEAT_SHA256",
};
"hw.optional.arm.FEAT_SHA256"
];
[Flags]
public enum MacOsFeatureFlags

View File

@@ -261,10 +261,10 @@ namespace ARMeilleure.CodeGen.Arm64
Operand dest = operation.Destination;
List<Operand> sources = new()
{
operation.GetSource(0),
};
List<Operand> sources =
[
operation.GetSource(0)
];
int argsCount = operation.SourcesCount - 1;
@@ -365,10 +365,10 @@ namespace ARMeilleure.CodeGen.Arm64
Operation node,
Operation operation)
{
List<Operand> sources = new()
{
operation.GetSource(0),
};
List<Operand> sources =
[
operation.GetSource(0)
];
int argsCount = operation.SourcesCount - 1;
@@ -468,8 +468,8 @@ namespace ARMeilleure.CodeGen.Arm64
// Update the sources and destinations with split 64-bit halfs of the whole 128-bit values.
// We also need a additional registers that will be used to store temporary information.
operation.SetDestinations(new[] { actualLow, actualHigh, Local(OperandType.I64), Local(OperandType.I64) });
operation.SetSources(new[] { address, expectedLow, expectedHigh, desiredLow, desiredHigh });
operation.SetDestinations([actualLow, actualHigh, Local(OperandType.I64), Local(OperandType.I64)]);
operation.SetSources([address, expectedLow, expectedHigh, desiredLow, desiredHigh]);
// Add some dummy uses of the input operands, as the CAS operation will be a loop,
// so they can't be used as destination operand.
@@ -486,7 +486,7 @@ namespace ARMeilleure.CodeGen.Arm64
else
{
// We need a additional register where the store result will be written to.
node.SetDestinations(new[] { node.Destination, Local(OperandType.I32) });
node.SetDestinations([node.Destination, Local(OperandType.I32)]);
// Add some dummy uses of the input operands, as the CAS operation will be a loop,
// so they can't be used as destination operand.

View File

@@ -10,7 +10,7 @@ namespace ARMeilleure.CodeGen.Linking
/// <summary>
/// Gets an empty <see cref="RelocInfo"/>.
/// </summary>
public static RelocInfo Empty { get; } = new RelocInfo(null);
public static RelocInfo Empty { get; } = new(null);
private readonly RelocEntry[] _entries;

View File

@@ -31,7 +31,7 @@ namespace ARMeilleure.CodeGen.RegisterAllocators
public ParallelCopy()
{
_copies = new List<Copy>();
_copies = [];
}
public void AddCopy(Register dest, Register source, OperandType type)
@@ -218,7 +218,7 @@ namespace ARMeilleure.CodeGen.RegisterAllocators
public Operation[] Sequence()
{
List<Operation> sequence = new();
List<Operation> sequence = [];
if (_spillQueue != null)
{

View File

@@ -115,7 +115,7 @@ namespace ARMeilleure.CodeGen.RegisterAllocators
{
NumberLocals(cfg, regMasks.RegistersCount);
AllocationContext context = new AllocationContext(stackAlloc, regMasks, _intervals.Count);
AllocationContext context = new(stackAlloc, regMasks, _intervals.Count);
BuildIntervals(cfg, context);
@@ -799,8 +799,8 @@ namespace ARMeilleure.CodeGen.RegisterAllocators
private void NumberLocals(ControlFlowGraph cfg, int registersCount)
{
_operationNodes = new List<(IntrusiveList<Operation>, Operation)>();
_intervals = new List<LiveInterval>();
_operationNodes = [];
_intervals = [];
for (int index = 0; index < registersCount; index++)
{
@@ -839,7 +839,7 @@ namespace ARMeilleure.CodeGen.RegisterAllocators
{
dest.NumberLocal(_intervals.Count);
LiveInterval interval = new LiveInterval(dest);
LiveInterval interval = new(dest);
_intervals.Add(interval);
SetVisited(dest);
@@ -980,7 +980,7 @@ namespace ARMeilleure.CodeGen.RegisterAllocators
_blockLiveIn = blkLiveIn;
_blockEdges = new HashSet<int>();
_blockEdges = [];
// Compute lifetime intervals.
int operationPos = _operationsCount;

View File

@@ -75,9 +75,9 @@ namespace ARMeilleure.CodeGen.X86
{
_stream = stream;
_labels = new Dictionary<Operand, long>();
_jumps = new List<Jump>();
_jumps = [];
_relocs = relocatable ? new List<Reloc>() : null;
_relocs = relocatable ? [] : null;
}
public void MarkLabel(Operand label)
@@ -1412,14 +1412,14 @@ namespace ARMeilleure.CodeGen.X86
_stream.Seek(0, SeekOrigin.Begin);
using RecyclableMemoryStream codeStream = MemoryStreamManager.Shared.GetStream();
Assembler assembler = new Assembler(codeStream, HasRelocs);
Assembler assembler = new(codeStream, HasRelocs);
bool hasRelocs = HasRelocs;
int relocIndex = 0;
int relocOffset = 0;
RelocEntry[] relocEntries = hasRelocs
? new RelocEntry[relocs.Length]
: Array.Empty<RelocEntry>();
: [];
for (int i = 0; i < jumps.Length; i++)
{
@@ -1471,7 +1471,7 @@ namespace ARMeilleure.CodeGen.X86
_stream.CopyTo(codeStream);
byte[] code = codeStream.ToArray();
RelocInfo relocInfo = new RelocInfo(relocEntries);
RelocInfo relocInfo = new(relocEntries);
return (code, relocInfo);
}

View File

@@ -1748,7 +1748,7 @@ namespace ARMeilleure.CodeGen.X86
private static UnwindInfo WritePrologue(CodeGenContext context)
{
List<UnwindPushEntry> pushEntries = new();
List<UnwindPushEntry> pushEntries = [];
Operand rsp = Register(X86Register.Rsp);

View File

@@ -40,12 +40,12 @@ namespace ARMeilleure.CodeGen.X86
return 0;
}
ReadOnlySpan<byte> asmGetXcr0 = new byte[]
{
ReadOnlySpan<byte> asmGetXcr0 =
[
0x31, 0xc9, // xor ecx, ecx
0xf, 0x01, 0xd0, // xgetbv
0xc3, // ret
};
0xc3 // ret
];
using MemoryBlock memGetXcr0 = new((ulong)asmGetXcr0.Length);

View File

@@ -124,13 +124,13 @@ namespace ARMeilleure.CodeGen.X86
{
int stackOffset = stackAlloc.Allocate(OperandType.I32);
node.SetSources(new Operand[] { Const(stackOffset), node.GetSource(0) });
node.SetSources([Const(stackOffset), node.GetSource(0)]);
}
else if (node.Intrinsic == Intrinsic.X86Stmxcsr)
{
int stackOffset = stackAlloc.Allocate(OperandType.I32);
node.SetSources(new Operand[] { Const(stackOffset) });
node.SetSources([Const(stackOffset)]);
}
break;
}
@@ -253,8 +253,8 @@ namespace ARMeilleure.CodeGen.X86
node = nodes.AddAfter(node, Operation(Instruction.VectorCreateScalar, dest, rax));
nodes.AddAfter(node, Operation(Instruction.VectorInsert, dest, dest, rdx, Const(1)));
operation.SetDestinations(new Operand[] { rdx, rax });
operation.SetSources(new Operand[] { operation.GetSource(0), rdx, rax, rcx, rbx });
operation.SetDestinations([rdx, rax]);
operation.SetSources([operation.GetSource(0), rdx, rax, rcx, rbx]);
}
else
{
@@ -274,7 +274,7 @@ namespace ARMeilleure.CodeGen.X86
nodes.AddBefore(node, Operation(Instruction.Copy, temp, newValue));
node.SetSources(new Operand[] { node.GetSource(0), rax, temp });
node.SetSources([node.GetSource(0), rax, temp]);
nodes.AddAfter(node, Operation(Instruction.Copy, dest, rax));
@@ -303,7 +303,7 @@ namespace ARMeilleure.CodeGen.X86
nodes.AddAfter(node, Operation(Instruction.Copy, dest, rax));
node.SetSources(new Operand[] { rdx, rax, node.GetSource(1) });
node.SetSources([rdx, rax, node.GetSource(1)]);
node.Destination = rax;
}
@@ -348,7 +348,7 @@ namespace ARMeilleure.CodeGen.X86
nodes.AddAfter(node, Operation(Instruction.Copy, dest, rdx));
node.SetDestinations(new Operand[] { rdx, rax });
node.SetDestinations([rdx, rax]);
break;
}

View File

@@ -14,10 +14,10 @@ namespace ARMeilleure.CodeGen.X86
{
Operand dest = node.Destination;
List<Operand> sources = new()
{
node.GetSource(0),
};
List<Operand> sources =
[
node.GetSource(0)
];
int argsCount = node.SourcesCount - 1;
@@ -117,10 +117,10 @@ namespace ARMeilleure.CodeGen.X86
public static void InsertTailcallCopies(IntrusiveList<Operation> nodes, Operation node)
{
List<Operand> sources = new()
{
node.GetSource(0),
};
List<Operand> sources =
[
node.GetSource(0)
];
int argsCount = node.SourcesCount - 1;

View File

@@ -321,7 +321,7 @@ namespace ARMeilleure.CodeGen.X86
nodes.AddBefore(node, retCopyOp);
}
node.SetSources(Array.Empty<Operand>());
node.SetSources([]);
}
}
}

View File

@@ -13,7 +13,7 @@ namespace ARMeilleure.CodeGen.X86
public static void RunPass(ControlFlowGraph cfg)
{
Dictionary<ulong, Operand> constants = new Dictionary<ulong, Operand>();
Dictionary<ulong, Operand> constants = new();
Operand GetConstantCopy(BasicBlock block, Operation operation, Operand source)
{

View File

@@ -3,52 +3,46 @@ namespace ARMeilleure.Common
public static class AddressTablePresets
{
private static readonly AddressTableLevel[] _levels64Bit =
new AddressTableLevel[]
{
new(31, 17),
[
new(31, 17),
new(23, 8),
new(15, 8),
new( 7, 8),
new( 2, 5),
};
new( 2, 5)
];
private static readonly AddressTableLevel[] _levels32Bit =
new AddressTableLevel[]
{
new(31, 17),
[
new(31, 17),
new(23, 8),
new(15, 8),
new( 7, 8),
new( 1, 6),
};
new( 1, 6)
];
private static readonly AddressTableLevel[] _levels64BitSparseTiny =
new AddressTableLevel[]
{
new( 11, 28),
new( 2, 9),
};
[
new( 11, 28),
new( 2, 9)
];
private static readonly AddressTableLevel[] _levels32BitSparseTiny =
new AddressTableLevel[]
{
new( 10, 22),
new( 1, 9),
};
[
new( 10, 22),
new( 1, 9)
];
private static readonly AddressTableLevel[] _levels64BitSparseGiant =
new AddressTableLevel[]
{
new( 38, 1),
new( 2, 36),
};
[
new( 38, 1),
new( 2, 36)
];
private static readonly AddressTableLevel[] _levels32BitSparseGiant =
new AddressTableLevel[]
{
new( 31, 1),
new( 1, 30),
};
[
new( 31, 1),
new( 1, 30)
];
//high power will run worse on DDR3 systems and some DDR4 systems due to the higher ram utilization
//low power will never run worse than non-sparse, but for most systems it won't be necessary

View File

@@ -130,12 +130,12 @@ namespace ARMeilleure.Common
if (count > _count)
{
long* oldMask = _masks;
Span<long> oldSpan = new Span<long>(_masks, _count);
Span<long> oldSpan = new(_masks, _count);
_masks = _allocator.Allocate<long>((uint)count);
_count = count;
Span<long> newSpan = new Span<long>(_masks, _count);
Span<long> newSpan = new(_masks, _count);
oldSpan.CopyTo(newSpan);
newSpan[oldSpan.Length..].Clear();

View File

@@ -5,7 +5,7 @@ namespace ARMeilleure.Common
{
static class BitUtils
{
private static ReadOnlySpan<sbyte> HbsNibbleLut => new sbyte[] { -1, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3 };
private static ReadOnlySpan<sbyte> HbsNibbleLut => [-1, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3];
public static long FillWithOnes(int bits)
{

View File

@@ -17,7 +17,7 @@ namespace ARMeilleure.Decoders
public Block()
{
OpCodes = new List<OpCode>();
OpCodes = [];
}
public Block(ulong address) : this()

View File

@@ -20,7 +20,7 @@ namespace ARMeilleure.Decoders
public static Block[] Decode(IMemoryManager memory, ulong address, ExecutionMode mode, bool highCq, DecoderMode dMode)
{
List<Block> blocks = new();
List<Block> blocks = [];
Queue<Block> workQueue = new();

View File

@@ -5,12 +5,12 @@ namespace ARMeilleure.Decoders
class OpCode32SimdMemPair : OpCode32, IOpCode32Simd
{
private static readonly int[] _regsMap =
{
[
1, 1, 4, 2,
1, 1, 3, 1,
1, 1, 2, 1,
1, 1, 1, 1,
};
1, 1, 1, 1
];
public int Vd { get; }
public int Rn { get; }

View File

@@ -12,7 +12,7 @@ namespace ARMeilleure.Decoders
public OpCodeT16IfThen(InstDescriptor inst, ulong address, int opCode) : base(inst, address, opCode)
{
List<Condition> conds = new();
List<Condition> conds = [];
int cond = (opCode >> 4) & 0xf;
int mask = opCode & 0xf;

View File

@@ -29,9 +29,9 @@ namespace ARMeilleure.Decoders
}
}
private static readonly List<InstInfo> _allInstA32 = new();
private static readonly List<InstInfo> _allInstT32 = new();
private static readonly List<InstInfo> _allInstA64 = new();
private static readonly List<InstInfo> _allInstA32 = [];
private static readonly List<InstInfo> _allInstT32 = [];
private static readonly List<InstInfo> _allInstA64 = [];
private static readonly InstInfo[][] _instA32FastLookup = new InstInfo[FastLookupSize][];
private static readonly InstInfo[][] _instT32FastLookup = new InstInfo[FastLookupSize][];
@@ -1330,7 +1330,7 @@ namespace ARMeilleure.Decoders
for (int index = 0; index < temp.Length; index++)
{
temp[index] = new List<InstInfo>();
temp[index] = [];
}
foreach (InstInfo inst in allInsts)

View File

@@ -69,7 +69,7 @@ namespace ARMeilleure.Decoders.Optimizations
}
}
List<Block> newBlocks = new List<Block>(blocks.Count);
List<Block> newBlocks = new(blocks.Count);
// Finally, rebuild decoded block list, ignoring blocks outside the contiguous range.
for (int i = 0; i < blocks.Count; i++)

View File

@@ -285,7 +285,7 @@ namespace ARMeilleure.Diagnostics
public static string GetDump(ControlFlowGraph cfg)
{
IRDumper dumper = new IRDumper(1);
IRDumper dumper = new(1);
for (BasicBlock block = cfg.Blocks.First; block != null; block = block.ListNext)
{

View File

@@ -29,7 +29,7 @@ namespace ARMeilleure.Diagnostics
static Symbols()
{
_symbols = new ConcurrentDictionary<ulong, string>();
_rangedSymbols = new List<RangedSymbol>();
_rangedSymbols = [];
}
public static string Get(ulong address)

View File

@@ -9,8 +9,8 @@ namespace ARMeilleure.Instructions
{
#region "LookUp Tables"
#pragma warning disable IDE1006 // Naming rule violation
private static ReadOnlySpan<byte> _sBox => new byte[]
{
private static ReadOnlySpan<byte> _sBox =>
[
0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76,
0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0,
0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15,
@@ -26,11 +26,11 @@ namespace ARMeilleure.Instructions
0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a,
0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e,
0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf,
0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16,
};
0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16
];
private static ReadOnlySpan<byte> _invSBox => new byte[]
{
private static ReadOnlySpan<byte> _invSBox =>
[
0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb,
0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb,
0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e,
@@ -46,11 +46,11 @@ namespace ARMeilleure.Instructions
0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f,
0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef,
0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61,
0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d,
};
0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d
];
private static ReadOnlySpan<byte> _gfMul02 => new byte[]
{
private static ReadOnlySpan<byte> _gfMul02 =>
[
0x00, 0x02, 0x04, 0x06, 0x08, 0x0a, 0x0c, 0x0e, 0x10, 0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e,
0x20, 0x22, 0x24, 0x26, 0x28, 0x2a, 0x2c, 0x2e, 0x30, 0x32, 0x34, 0x36, 0x38, 0x3a, 0x3c, 0x3e,
0x40, 0x42, 0x44, 0x46, 0x48, 0x4a, 0x4c, 0x4e, 0x50, 0x52, 0x54, 0x56, 0x58, 0x5a, 0x5c, 0x5e,
@@ -66,11 +66,11 @@ namespace ARMeilleure.Instructions
0x9b, 0x99, 0x9f, 0x9d, 0x93, 0x91, 0x97, 0x95, 0x8b, 0x89, 0x8f, 0x8d, 0x83, 0x81, 0x87, 0x85,
0xbb, 0xb9, 0xbf, 0xbd, 0xb3, 0xb1, 0xb7, 0xb5, 0xab, 0xa9, 0xaf, 0xad, 0xa3, 0xa1, 0xa7, 0xa5,
0xdb, 0xd9, 0xdf, 0xdd, 0xd3, 0xd1, 0xd7, 0xd5, 0xcb, 0xc9, 0xcf, 0xcd, 0xc3, 0xc1, 0xc7, 0xc5,
0xfb, 0xf9, 0xff, 0xfd, 0xf3, 0xf1, 0xf7, 0xf5, 0xeb, 0xe9, 0xef, 0xed, 0xe3, 0xe1, 0xe7, 0xe5,
};
0xfb, 0xf9, 0xff, 0xfd, 0xf3, 0xf1, 0xf7, 0xf5, 0xeb, 0xe9, 0xef, 0xed, 0xe3, 0xe1, 0xe7, 0xe5
];
private static ReadOnlySpan<byte> _gfMul03 => new byte[]
{
private static ReadOnlySpan<byte> _gfMul03 =>
[
0x00, 0x03, 0x06, 0x05, 0x0c, 0x0f, 0x0a, 0x09, 0x18, 0x1b, 0x1e, 0x1d, 0x14, 0x17, 0x12, 0x11,
0x30, 0x33, 0x36, 0x35, 0x3c, 0x3f, 0x3a, 0x39, 0x28, 0x2b, 0x2e, 0x2d, 0x24, 0x27, 0x22, 0x21,
0x60, 0x63, 0x66, 0x65, 0x6c, 0x6f, 0x6a, 0x69, 0x78, 0x7b, 0x7e, 0x7d, 0x74, 0x77, 0x72, 0x71,
@@ -86,11 +86,11 @@ namespace ARMeilleure.Instructions
0x5b, 0x58, 0x5d, 0x5e, 0x57, 0x54, 0x51, 0x52, 0x43, 0x40, 0x45, 0x46, 0x4f, 0x4c, 0x49, 0x4a,
0x6b, 0x68, 0x6d, 0x6e, 0x67, 0x64, 0x61, 0x62, 0x73, 0x70, 0x75, 0x76, 0x7f, 0x7c, 0x79, 0x7a,
0x3b, 0x38, 0x3d, 0x3e, 0x37, 0x34, 0x31, 0x32, 0x23, 0x20, 0x25, 0x26, 0x2f, 0x2c, 0x29, 0x2a,
0x0b, 0x08, 0x0d, 0x0e, 0x07, 0x04, 0x01, 0x02, 0x13, 0x10, 0x15, 0x16, 0x1f, 0x1c, 0x19, 0x1a,
};
0x0b, 0x08, 0x0d, 0x0e, 0x07, 0x04, 0x01, 0x02, 0x13, 0x10, 0x15, 0x16, 0x1f, 0x1c, 0x19, 0x1a
];
private static ReadOnlySpan<byte> _gfMul09 => new byte[]
{
private static ReadOnlySpan<byte> _gfMul09 =>
[
0x00, 0x09, 0x12, 0x1b, 0x24, 0x2d, 0x36, 0x3f, 0x48, 0x41, 0x5a, 0x53, 0x6c, 0x65, 0x7e, 0x77,
0x90, 0x99, 0x82, 0x8b, 0xb4, 0xbd, 0xa6, 0xaf, 0xd8, 0xd1, 0xca, 0xc3, 0xfc, 0xf5, 0xee, 0xe7,
0x3b, 0x32, 0x29, 0x20, 0x1f, 0x16, 0x0d, 0x04, 0x73, 0x7a, 0x61, 0x68, 0x57, 0x5e, 0x45, 0x4c,
@@ -106,11 +106,11 @@ namespace ARMeilleure.Instructions
0x9a, 0x93, 0x88, 0x81, 0xbe, 0xb7, 0xac, 0xa5, 0xd2, 0xdb, 0xc0, 0xc9, 0xf6, 0xff, 0xe4, 0xed,
0x0a, 0x03, 0x18, 0x11, 0x2e, 0x27, 0x3c, 0x35, 0x42, 0x4b, 0x50, 0x59, 0x66, 0x6f, 0x74, 0x7d,
0xa1, 0xa8, 0xb3, 0xba, 0x85, 0x8c, 0x97, 0x9e, 0xe9, 0xe0, 0xfb, 0xf2, 0xcd, 0xc4, 0xdf, 0xd6,
0x31, 0x38, 0x23, 0x2a, 0x15, 0x1c, 0x07, 0x0e, 0x79, 0x70, 0x6b, 0x62, 0x5d, 0x54, 0x4f, 0x46,
};
0x31, 0x38, 0x23, 0x2a, 0x15, 0x1c, 0x07, 0x0e, 0x79, 0x70, 0x6b, 0x62, 0x5d, 0x54, 0x4f, 0x46
];
private static ReadOnlySpan<byte> _gfMul0B => new byte[]
{
private static ReadOnlySpan<byte> _gfMul0B =>
[
0x00, 0x0b, 0x16, 0x1d, 0x2c, 0x27, 0x3a, 0x31, 0x58, 0x53, 0x4e, 0x45, 0x74, 0x7f, 0x62, 0x69,
0xb0, 0xbb, 0xa6, 0xad, 0x9c, 0x97, 0x8a, 0x81, 0xe8, 0xe3, 0xfe, 0xf5, 0xc4, 0xcf, 0xd2, 0xd9,
0x7b, 0x70, 0x6d, 0x66, 0x57, 0x5c, 0x41, 0x4a, 0x23, 0x28, 0x35, 0x3e, 0x0f, 0x04, 0x19, 0x12,
@@ -126,11 +126,11 @@ namespace ARMeilleure.Instructions
0x01, 0x0a, 0x17, 0x1c, 0x2d, 0x26, 0x3b, 0x30, 0x59, 0x52, 0x4f, 0x44, 0x75, 0x7e, 0x63, 0x68,
0xb1, 0xba, 0xa7, 0xac, 0x9d, 0x96, 0x8b, 0x80, 0xe9, 0xe2, 0xff, 0xf4, 0xc5, 0xce, 0xd3, 0xd8,
0x7a, 0x71, 0x6c, 0x67, 0x56, 0x5d, 0x40, 0x4b, 0x22, 0x29, 0x34, 0x3f, 0x0e, 0x05, 0x18, 0x13,
0xca, 0xc1, 0xdc, 0xd7, 0xe6, 0xed, 0xf0, 0xfb, 0x92, 0x99, 0x84, 0x8f, 0xbe, 0xb5, 0xa8, 0xa3,
};
0xca, 0xc1, 0xdc, 0xd7, 0xe6, 0xed, 0xf0, 0xfb, 0x92, 0x99, 0x84, 0x8f, 0xbe, 0xb5, 0xa8, 0xa3
];
private static ReadOnlySpan<byte> _gfMul0D => new byte[]
{
private static ReadOnlySpan<byte> _gfMul0D =>
[
0x00, 0x0d, 0x1a, 0x17, 0x34, 0x39, 0x2e, 0x23, 0x68, 0x65, 0x72, 0x7f, 0x5c, 0x51, 0x46, 0x4b,
0xd0, 0xdd, 0xca, 0xc7, 0xe4, 0xe9, 0xfe, 0xf3, 0xb8, 0xb5, 0xa2, 0xaf, 0x8c, 0x81, 0x96, 0x9b,
0xbb, 0xb6, 0xa1, 0xac, 0x8f, 0x82, 0x95, 0x98, 0xd3, 0xde, 0xc9, 0xc4, 0xe7, 0xea, 0xfd, 0xf0,
@@ -146,11 +146,11 @@ namespace ARMeilleure.Instructions
0xb7, 0xba, 0xad, 0xa0, 0x83, 0x8e, 0x99, 0x94, 0xdf, 0xd2, 0xc5, 0xc8, 0xeb, 0xe6, 0xf1, 0xfc,
0x67, 0x6a, 0x7d, 0x70, 0x53, 0x5e, 0x49, 0x44, 0x0f, 0x02, 0x15, 0x18, 0x3b, 0x36, 0x21, 0x2c,
0x0c, 0x01, 0x16, 0x1b, 0x38, 0x35, 0x22, 0x2f, 0x64, 0x69, 0x7e, 0x73, 0x50, 0x5d, 0x4a, 0x47,
0xdc, 0xd1, 0xc6, 0xcb, 0xe8, 0xe5, 0xf2, 0xff, 0xb4, 0xb9, 0xae, 0xa3, 0x80, 0x8d, 0x9a, 0x97,
};
0xdc, 0xd1, 0xc6, 0xcb, 0xe8, 0xe5, 0xf2, 0xff, 0xb4, 0xb9, 0xae, 0xa3, 0x80, 0x8d, 0x9a, 0x97
];
private static ReadOnlySpan<byte> _gfMul0E => new byte[]
{
private static ReadOnlySpan<byte> _gfMul0E =>
[
0x00, 0x0e, 0x1c, 0x12, 0x38, 0x36, 0x24, 0x2a, 0x70, 0x7e, 0x6c, 0x62, 0x48, 0x46, 0x54, 0x5a,
0xe0, 0xee, 0xfc, 0xf2, 0xd8, 0xd6, 0xc4, 0xca, 0x90, 0x9e, 0x8c, 0x82, 0xa8, 0xa6, 0xb4, 0xba,
0xdb, 0xd5, 0xc7, 0xc9, 0xe3, 0xed, 0xff, 0xf1, 0xab, 0xa5, 0xb7, 0xb9, 0x93, 0x9d, 0x8f, 0x81,
@@ -166,18 +166,18 @@ namespace ARMeilleure.Instructions
0xec, 0xe2, 0xf0, 0xfe, 0xd4, 0xda, 0xc8, 0xc6, 0x9c, 0x92, 0x80, 0x8e, 0xa4, 0xaa, 0xb8, 0xb6,
0x0c, 0x02, 0x10, 0x1e, 0x34, 0x3a, 0x28, 0x26, 0x7c, 0x72, 0x60, 0x6e, 0x44, 0x4a, 0x58, 0x56,
0x37, 0x39, 0x2b, 0x25, 0x0f, 0x01, 0x13, 0x1d, 0x47, 0x49, 0x5b, 0x55, 0x7f, 0x71, 0x63, 0x6d,
0xd7, 0xd9, 0xcb, 0xc5, 0xef, 0xe1, 0xf3, 0xfd, 0xa7, 0xa9, 0xbb, 0xb5, 0x9f, 0x91, 0x83, 0x8d,
};
0xd7, 0xd9, 0xcb, 0xc5, 0xef, 0xe1, 0xf3, 0xfd, 0xa7, 0xa9, 0xbb, 0xb5, 0x9f, 0x91, 0x83, 0x8d
];
private static ReadOnlySpan<byte> _srPerm => new byte[]
{
0, 13, 10, 7, 4, 1, 14, 11, 8, 5, 2, 15, 12, 9, 6, 3,
};
private static ReadOnlySpan<byte> _srPerm =>
[
0, 13, 10, 7, 4, 1, 14, 11, 8, 5, 2, 15, 12, 9, 6, 3
];
private static ReadOnlySpan<byte> _isrPerm => new byte[]
{
0, 5, 10, 15, 4, 9, 14, 3, 8, 13, 2, 7, 12, 1, 6, 11,
};
private static ReadOnlySpan<byte> _isrPerm =>
[
0, 5, 10, 15, 4, 9, 14, 3, 8, 13, 2, 7, 12, 1, 6, 11
];
#pragma warning restore IDE1006
#endregion

View File

@@ -245,8 +245,8 @@ namespace ARMeilleure.Instructions
string name = nameof(Math.Round);
MethodInfo info = (op.Size & 1) == 0
? typeof(MathF).GetMethod(name, new Type[] { typeof(float), typeof(MidpointRounding) })
: typeof(Math).GetMethod(name, new Type[] { typeof(double), typeof(MidpointRounding) });
? typeof(MathF).GetMethod(name, [typeof(float), typeof(MidpointRounding)])
: typeof(Math).GetMethod(name, [typeof(double), typeof(MidpointRounding)]);
return context.Call(info, n, Const((int)roundMode));
}

View File

@@ -18,19 +18,19 @@ namespace ARMeilleure.Instructions
static class InstEmitSimdHelper
{
#region "Masks"
public static readonly long[] EvenMasks = new long[]
{
public static readonly long[] EvenMasks =
[
14L << 56 | 12L << 48 | 10L << 40 | 08L << 32 | 06L << 24 | 04L << 16 | 02L << 8 | 00L << 0, // B
13L << 56 | 12L << 48 | 09L << 40 | 08L << 32 | 05L << 24 | 04L << 16 | 01L << 8 | 00L << 0, // H
11L << 56 | 10L << 48 | 09L << 40 | 08L << 32 | 03L << 24 | 02L << 16 | 01L << 8 | 00L << 0, // S
};
11L << 56 | 10L << 48 | 09L << 40 | 08L << 32 | 03L << 24 | 02L << 16 | 01L << 8 | 00L << 0 // S
];
public static readonly long[] OddMasks = new long[]
{
public static readonly long[] OddMasks =
[
15L << 56 | 13L << 48 | 11L << 40 | 09L << 32 | 07L << 24 | 05L << 16 | 03L << 8 | 01L << 0, // B
15L << 56 | 14L << 48 | 11L << 40 | 10L << 32 | 07L << 24 | 06L << 16 | 03L << 8 | 02L << 0, // H
15L << 56 | 14L << 48 | 13L << 40 | 12L << 32 | 07L << 24 | 06L << 16 | 05L << 8 | 04L << 0, // S
};
15L << 56 | 14L << 48 | 13L << 40 | 12L << 32 | 07L << 24 | 06L << 16 | 05L << 8 | 04L << 0 // S
];
public const long ZeroMask = 128L << 56 | 128L << 48 | 128L << 40 | 128L << 32 | 128L << 24 | 128L << 16 | 128L << 8 | 128L << 0;
@@ -44,118 +44,118 @@ namespace ARMeilleure.Instructions
#endregion
#region "X86 SSE Intrinsics"
public static readonly Intrinsic[] X86PaddInstruction = new Intrinsic[]
{
public static readonly Intrinsic[] X86PaddInstruction =
[
Intrinsic.X86Paddb,
Intrinsic.X86Paddw,
Intrinsic.X86Paddd,
Intrinsic.X86Paddq,
};
Intrinsic.X86Paddq
];
public static readonly Intrinsic[] X86PcmpeqInstruction = new Intrinsic[]
{
public static readonly Intrinsic[] X86PcmpeqInstruction =
[
Intrinsic.X86Pcmpeqb,
Intrinsic.X86Pcmpeqw,
Intrinsic.X86Pcmpeqd,
Intrinsic.X86Pcmpeqq,
};
Intrinsic.X86Pcmpeqq
];
public static readonly Intrinsic[] X86PcmpgtInstruction = new Intrinsic[]
{
public static readonly Intrinsic[] X86PcmpgtInstruction =
[
Intrinsic.X86Pcmpgtb,
Intrinsic.X86Pcmpgtw,
Intrinsic.X86Pcmpgtd,
Intrinsic.X86Pcmpgtq,
};
Intrinsic.X86Pcmpgtq
];
public static readonly Intrinsic[] X86PmaxsInstruction = new Intrinsic[]
{
public static readonly Intrinsic[] X86PmaxsInstruction =
[
Intrinsic.X86Pmaxsb,
Intrinsic.X86Pmaxsw,
Intrinsic.X86Pmaxsd,
};
Intrinsic.X86Pmaxsd
];
public static readonly Intrinsic[] X86PmaxuInstruction = new Intrinsic[]
{
public static readonly Intrinsic[] X86PmaxuInstruction =
[
Intrinsic.X86Pmaxub,
Intrinsic.X86Pmaxuw,
Intrinsic.X86Pmaxud,
};
Intrinsic.X86Pmaxud
];
public static readonly Intrinsic[] X86PminsInstruction = new Intrinsic[]
{
public static readonly Intrinsic[] X86PminsInstruction =
[
Intrinsic.X86Pminsb,
Intrinsic.X86Pminsw,
Intrinsic.X86Pminsd,
};
Intrinsic.X86Pminsd
];
public static readonly Intrinsic[] X86PminuInstruction = new Intrinsic[]
{
public static readonly Intrinsic[] X86PminuInstruction =
[
Intrinsic.X86Pminub,
Intrinsic.X86Pminuw,
Intrinsic.X86Pminud,
};
Intrinsic.X86Pminud
];
public static readonly Intrinsic[] X86PmovsxInstruction = new Intrinsic[]
{
public static readonly Intrinsic[] X86PmovsxInstruction =
[
Intrinsic.X86Pmovsxbw,
Intrinsic.X86Pmovsxwd,
Intrinsic.X86Pmovsxdq,
};
Intrinsic.X86Pmovsxdq
];
public static readonly Intrinsic[] X86PmovzxInstruction = new Intrinsic[]
{
public static readonly Intrinsic[] X86PmovzxInstruction =
[
Intrinsic.X86Pmovzxbw,
Intrinsic.X86Pmovzxwd,
Intrinsic.X86Pmovzxdq,
};
Intrinsic.X86Pmovzxdq
];
public static readonly Intrinsic[] X86PsllInstruction = new Intrinsic[]
{
public static readonly Intrinsic[] X86PsllInstruction =
[
0,
Intrinsic.X86Psllw,
Intrinsic.X86Pslld,
Intrinsic.X86Psllq,
};
Intrinsic.X86Psllq
];
public static readonly Intrinsic[] X86PsraInstruction = new Intrinsic[]
{
public static readonly Intrinsic[] X86PsraInstruction =
[
0,
Intrinsic.X86Psraw,
Intrinsic.X86Psrad,
};
Intrinsic.X86Psrad
];
public static readonly Intrinsic[] X86PsrlInstruction = new Intrinsic[]
{
public static readonly Intrinsic[] X86PsrlInstruction =
[
0,
Intrinsic.X86Psrlw,
Intrinsic.X86Psrld,
Intrinsic.X86Psrlq,
};
Intrinsic.X86Psrlq
];
public static readonly Intrinsic[] X86PsubInstruction = new Intrinsic[]
{
public static readonly Intrinsic[] X86PsubInstruction =
[
Intrinsic.X86Psubb,
Intrinsic.X86Psubw,
Intrinsic.X86Psubd,
Intrinsic.X86Psubq,
};
Intrinsic.X86Psubq
];
public static readonly Intrinsic[] X86PunpckhInstruction = new Intrinsic[]
{
public static readonly Intrinsic[] X86PunpckhInstruction =
[
Intrinsic.X86Punpckhbw,
Intrinsic.X86Punpckhwd,
Intrinsic.X86Punpckhdq,
Intrinsic.X86Punpckhqdq,
};
Intrinsic.X86Punpckhqdq
];
public static readonly Intrinsic[] X86PunpcklInstruction = new Intrinsic[]
{
public static readonly Intrinsic[] X86PunpcklInstruction =
[
Intrinsic.X86Punpcklbw,
Intrinsic.X86Punpcklwd,
Intrinsic.X86Punpckldq,
Intrinsic.X86Punpcklqdq,
};
Intrinsic.X86Punpcklqdq
];
#endregion
public static void EnterArmFpMode(EmitterContext context, Func<FPState, Operand> getFpFlag)
@@ -460,8 +460,8 @@ namespace ARMeilleure.Instructions
IOpCodeSimd op = (IOpCodeSimd)context.CurrOp;
MethodInfo info = (op.Size & 1) == 0
? typeof(MathHelperF).GetMethod(name, new Type[] { typeof(float) })
: typeof(MathHelper).GetMethod(name, new Type[] { typeof(double) });
? typeof(MathHelperF).GetMethod(name, [typeof(float)])
: typeof(MathHelper).GetMethod(name, [typeof(double)]);
return context.Call(info, n);
}
@@ -473,8 +473,8 @@ namespace ARMeilleure.Instructions
string name = nameof(MathHelper.Round);
MethodInfo info = (op.Size & 1) == 0
? typeof(MathHelperF).GetMethod(name, new Type[] { typeof(float), typeof(int) })
: typeof(MathHelper).GetMethod(name, new Type[] { typeof(double), typeof(int) });
? typeof(MathHelperF).GetMethod(name, [typeof(float), typeof(int)])
: typeof(MathHelper).GetMethod(name, [typeof(double), typeof(int)]);
return context.Call(info, n, Const((int)roundMode));
}

View File

@@ -12,17 +12,17 @@ namespace ARMeilleure.Instructions
static partial class InstEmit
{
#region "Masks"
private static readonly long[] _masksE0_Uzp = new long[]
{
private static readonly long[] _masksE0_Uzp =
[
13L << 56 | 09L << 48 | 05L << 40 | 01L << 32 | 12L << 24 | 08L << 16 | 04L << 8 | 00L << 0,
11L << 56 | 10L << 48 | 03L << 40 | 02L << 32 | 09L << 24 | 08L << 16 | 01L << 8 | 00L << 0,
};
11L << 56 | 10L << 48 | 03L << 40 | 02L << 32 | 09L << 24 | 08L << 16 | 01L << 8 | 00L << 0
];
private static readonly long[] _masksE1_Uzp = new long[]
{
private static readonly long[] _masksE1_Uzp =
[
15L << 56 | 11L << 48 | 07L << 40 | 03L << 32 | 14L << 24 | 10L << 16 | 06L << 8 | 02L << 0,
15L << 56 | 14L << 48 | 07L << 40 | 06L << 32 | 13L << 24 | 12L << 16 | 05L << 8 | 04L << 0,
};
15L << 56 | 14L << 48 | 07L << 40 | 06L << 32 | 13L << 24 | 12L << 16 | 05L << 8 | 04L << 0
];
#endregion
public static void Dup_Gp(ArmEmitterContext context)
@@ -601,7 +601,7 @@ namespace ARMeilleure.Instructions
{
Operand d = GetVec(op.Rd);
List<Operand> args = new();
List<Operand> args = [];
if (!isTbl)
{

View File

@@ -13,17 +13,17 @@ namespace ARMeilleure.Instructions
{
#region "Masks"
// Same as InstEmitSimdMove, as the instructions do the same thing.
private static readonly long[] _masksE0_Uzp = new long[]
{
private static readonly long[] _masksE0_Uzp =
[
13L << 56 | 09L << 48 | 05L << 40 | 01L << 32 | 12L << 24 | 08L << 16 | 04L << 8 | 00L << 0,
11L << 56 | 10L << 48 | 03L << 40 | 02L << 32 | 09L << 24 | 08L << 16 | 01L << 8 | 00L << 0,
};
11L << 56 | 10L << 48 | 03L << 40 | 02L << 32 | 09L << 24 | 08L << 16 | 01L << 8 | 00L << 0
];
private static readonly long[] _masksE1_Uzp = new long[]
{
private static readonly long[] _masksE1_Uzp =
[
15L << 56 | 11L << 48 | 07L << 40 | 03L << 32 | 14L << 24 | 10L << 16 | 06L << 8 | 02L << 0,
15L << 56 | 14L << 48 | 07L << 40 | 06L << 32 | 13L << 24 | 12L << 16 | 05L << 8 | 04L << 0,
};
15L << 56 | 14L << 48 | 07L << 40 | 06L << 32 | 13L << 24 | 12L << 16 | 05L << 8 | 04L << 0
];
#endregion
public static void Vmov_I(ArmEmitterContext context)

View File

@@ -17,10 +17,10 @@ namespace ARMeilleure.Instructions
static partial class InstEmit
{
#region "Masks"
private static readonly long[] _masks_SliSri = new long[] // Replication masks.
{
0x0101010101010101L, 0x0001000100010001L, 0x0000000100000001L, 0x0000000000000001L,
};
private static readonly long[] _masks_SliSri =
[
0x0101010101010101L, 0x0001000100010001L, 0x0000000100000001L, 0x0000000000000001L
];
#endregion
public static void Rshrn_V(ArmEmitterContext context)

View File

@@ -211,7 +211,7 @@ namespace ARMeilleure.Instructions
return (ulong)(size - 1);
}
private static ReadOnlySpan<byte> ClzNibbleTbl => new byte[] { 4, 3, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 };
private static ReadOnlySpan<byte> ClzNibbleTbl => [4, 3, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0];
[UnmanagedCallersOnly]
public static ulong CountLeadingZeros(ulong value, int size) // size is 8, 16, 32 or 64 (SIMD&FP or Base Inst.).

View File

@@ -27,7 +27,7 @@ namespace ARMeilleure.IntermediateRepresentation
{
get
{
_domFrontiers ??= new HashSet<BasicBlock>();
_domFrontiers ??= [];
return _domFrontiers;
}
@@ -38,7 +38,7 @@ namespace ARMeilleure.IntermediateRepresentation
public BasicBlock(int index)
{
Operations = new IntrusiveList<Operation>();
Predecessors = new List<BasicBlock>();
Predecessors = [];
Index = index;
}

View File

@@ -304,7 +304,7 @@ namespace ARMeilleure.IntermediateRepresentation
ushort newCount = checked((ushort)(count + 1));
ushort newCapacity = (ushort)Math.Min(capacity * 2, ushort.MaxValue);
Span<T> oldSpan = new Span<T>(data, count);
Span<T> oldSpan = new(data, count);
capacity = newCapacity;
data = Allocators.References.Allocate<T>(capacity);
@@ -338,7 +338,7 @@ namespace ARMeilleure.IntermediateRepresentation
throw new OverflowException();
}
Span<T> oldSpan = new Span<T>(data, (int)count);
Span<T> oldSpan = new(data, (int)count);
capacity = newCapacity;
data = Allocators.References.Allocate<T>(capacity);
@@ -352,7 +352,7 @@ namespace ARMeilleure.IntermediateRepresentation
private static void Remove<T>(in T item, ref T* data, ref ushort count) where T : unmanaged
{
Span<T> span = new Span<T>(data, count);
Span<T> span = new(data, count);
for (int i = 0; i < span.Length; i++)
{
@@ -372,7 +372,7 @@ namespace ARMeilleure.IntermediateRepresentation
private static void Remove<T>(in T item, ref T* data, ref uint count) where T : unmanaged
{
Span<T> span = new Span<T>(data, (int)count);
Span<T> span = new(data, (int)count);
for (int i = 0; i < span.Length; i++)
{

View File

@@ -198,7 +198,7 @@ namespace ARMeilleure.Signal
ControlFlowGraph cfg = context.GetControlFlowGraph();
OperandType[] argTypes = new OperandType[] { OperandType.I32, OperandType.I64, OperandType.I64 };
OperandType[] argTypes = [OperandType.I32, OperandType.I64, OperandType.I64];
return Compiler.Compile(cfg, argTypes, OperandType.None, CompilerOptions.HighCq, RuntimeInformation.ProcessArchitecture).Code;
}
@@ -252,7 +252,7 @@ namespace ARMeilleure.Signal
ControlFlowGraph cfg = context.GetControlFlowGraph();
OperandType[] argTypes = new OperandType[] { OperandType.I64 };
OperandType[] argTypes = [OperandType.I64];
return Compiler.Compile(cfg, argTypes, OperandType.I32, CompilerOptions.HighCq, RuntimeInformation.ProcessArchitecture).Code;
}

View File

@@ -30,7 +30,7 @@ namespace ARMeilleure.Signal
ControlFlowGraph cfg = context.GetControlFlowGraph();
OperandType[] argTypes = new OperandType[] { OperandType.I64 };
OperandType[] argTypes = [OperandType.I64];
return Compiler.Compile(cfg, argTypes, OperandType.I32, CompilerOptions.HighCq, RuntimeInformation.ProcessArchitecture).Map<DebugPartialUnmap>();
}
@@ -47,7 +47,7 @@ namespace ARMeilleure.Signal
ControlFlowGraph cfg = context.GetControlFlowGraph();
OperandType[] argTypes = new OperandType[] { OperandType.I64 };
OperandType[] argTypes = [OperandType.I64];
return Compiler.Compile(cfg, argTypes, OperandType.I32, CompilerOptions.HighCq, RuntimeInformation.ProcessArchitecture).Map<DebugThreadLocalMapGetOrReserve>();
}
@@ -76,7 +76,7 @@ namespace ARMeilleure.Signal
ControlFlowGraph cfg = context.GetControlFlowGraph();
OperandType[] argTypes = new OperandType[] { OperandType.I64 };
OperandType[] argTypes = [OperandType.I64];
return Compiler.Compile(cfg, argTypes, OperandType.None, CompilerOptions.HighCq, RuntimeInformation.ProcessArchitecture).Map<DebugNativeWriteLoop>();
}

View File

@@ -55,7 +55,7 @@ namespace ARMeilleure.Translation
public Aarch32Mode Mode { get; }
private int _ifThenBlockStateIndex = 0;
private Condition[] _ifThenBlockState = Array.Empty<Condition>();
private Condition[] _ifThenBlockState = [];
public bool IsInIfThenBlock => _ifThenBlockStateIndex < _ifThenBlockState.Length;
public Condition CurrentIfThenBlockCond => _ifThenBlockState[_ifThenBlockStateIndex];

View File

@@ -23,7 +23,7 @@ namespace ARMeilleure.Translation.Cache
}
}
private readonly List<MemoryBlock> _blocks = new();
private readonly List<MemoryBlock> _blocks = [];
public CacheMemoryAllocator(int capacity)
{

View File

@@ -25,7 +25,7 @@ namespace ARMeilleure.Translation.Cache
private static CacheMemoryAllocator _cacheAllocator;
private static readonly List<CacheEntry> _cacheEntries = new();
private static readonly List<CacheEntry> _cacheEntries = [];
private static readonly Lock _lock = new();
private static bool _initialized;

View File

@@ -6,8 +6,8 @@ namespace ARMeilleure.Translation.Cache
{
class JitCacheInvalidation
{
private static readonly int[] _invalidationCode = new int[]
{
private static readonly int[] _invalidationCode =
[
unchecked((int)0xd53b0022), // mrs x2, ctr_el0
unchecked((int)0xd3504c44), // ubfx x4, x2, #16, #4
unchecked((int)0x52800083), // mov w3, #0x4
@@ -35,8 +35,8 @@ namespace ARMeilleure.Translation.Cache
unchecked((int)0x54ffffa8), // b.hi 54 <ic_clear_loop>
unchecked((int)0xd5033b9f), // dsb ish
unchecked((int)0xd5033fdf), // isb
unchecked((int)0xd65f03c0), // ret
};
unchecked((int)0xd65f03c0) // ret
];
private delegate void InvalidateCache(ulong start, ulong end);

View File

@@ -47,8 +47,8 @@ namespace ARMeilleure.Translation
{
RemoveUnreachableBlocks(Blocks);
HashSet<BasicBlock> visited = new HashSet<BasicBlock>();
Stack<BasicBlock> blockStack = new Stack<BasicBlock>();
HashSet<BasicBlock> visited = [];
Stack<BasicBlock> blockStack = new();
Array.Resize(ref _postOrderBlocks, Blocks.Count);
Array.Resize(ref _postOrderMap, Blocks.Count);
@@ -88,8 +88,8 @@ namespace ARMeilleure.Translation
private void RemoveUnreachableBlocks(IntrusiveList<BasicBlock> blocks)
{
HashSet<BasicBlock> visited = new HashSet<BasicBlock>();
Queue<BasicBlock> workQueue = new Queue<BasicBlock>();
HashSet<BasicBlock> visited = [];
Queue<BasicBlock> workQueue = new();
visited.Add(Entry);
workQueue.Enqueue(Entry);

View File

@@ -108,7 +108,7 @@ namespace ARMeilleure.Translation
/// <returns>A list of all values sorted by Key Order</returns>
public List<TV> AsList()
{
List<TV> list = new();
List<TV> list = [];
AddToList(_root, list);

View File

@@ -154,7 +154,7 @@ namespace ARMeilleure.Translation.PTC
private void InitializeCarriers()
{
_infosStream = MemoryStreamManager.Shared.GetStream();
_codesList = new List<byte[]>();
_codesList = [];
_relocsStream = MemoryStreamManager.Shared.GetStream();
_unwindInfosStream = MemoryStreamManager.Shared.GetStream();
}
@@ -750,7 +750,7 @@ namespace ARMeilleure.Translation.PTC
UnwindInfo unwindInfo,
bool highCq)
{
CompiledFunction cFunc = new CompiledFunction(code, unwindInfo, RelocInfo.Empty);
CompiledFunction cFunc = new(code, unwindInfo, RelocInfo.Empty);
GuestFunction gFunc = cFunc.MapWithPointer<GuestFunction>(out nint gFuncPointer);
return new TranslatedFunction(gFunc, gFuncPointer, callCounter, guestSize, highCq);
@@ -765,7 +765,7 @@ namespace ARMeilleure.Translation.PTC
private void StubCode(int index)
{
_codesList[index] = Array.Empty<byte>();
_codesList[index] = [];
}
private void StubReloc(int relocEntriesCount)
@@ -945,7 +945,7 @@ namespace ARMeilleure.Translation.PTC
WriteCode(code.AsSpan());
// WriteReloc.
using BinaryWriter relocInfoWriter = new BinaryWriter(_relocsStream, EncodingCache.UTF8NoBOM, true);
using BinaryWriter relocInfoWriter = new(_relocsStream, EncodingCache.UTF8NoBOM, true);
foreach (RelocEntry entry in relocInfo.Entries)
{
@@ -955,7 +955,7 @@ namespace ARMeilleure.Translation.PTC
}
// WriteUnwindInfo.
using BinaryWriter unwindInfoWriter = new BinaryWriter(_unwindInfosStream, EncodingCache.UTF8NoBOM, true);
using BinaryWriter unwindInfoWriter = new(_unwindInfosStream, EncodingCache.UTF8NoBOM, true);
unwindInfoWriter.Write(unwindInfo.PushEntries.Length);

View File

@@ -50,7 +50,7 @@ namespace ARMeilleure.Translation.PTC
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static List<T> DeserializeList<T>(Stream stream) where T : struct
{
List<T> list = new();
List<T> list = [];
int count = DeserializeStructure<int>(stream);

View File

@@ -26,9 +26,10 @@ namespace ARMeilleure.Translation.PTC
private const uint InternalVersion = 5518; //! Not to be incremented manually for each change to the ARMeilleure project.
private static readonly uint[] _migrateInternalVersions = {
1866,
};
private static readonly uint[] _migrateInternalVersions =
[
1866
];
private const int SaveInterval = 30; // Seconds.
@@ -111,7 +112,7 @@ namespace ARMeilleure.Translation.PTC
public ConcurrentQueue<(ulong address, FuncProfile funcProfile)> GetProfiledFuncsToTranslate(TranslatorCache<TranslatedFunction> funcs)
{
ConcurrentQueue<(ulong address, FuncProfile funcProfile)> profiledFuncsToTranslate = new ConcurrentQueue<(ulong address, FuncProfile funcProfile)>();
ConcurrentQueue<(ulong address, FuncProfile funcProfile)> profiledFuncsToTranslate = new();
foreach (KeyValuePair<ulong, FuncProfile> profiledFunc in ProfiledFuncs)
{

View File

@@ -95,7 +95,7 @@ namespace ARMeilleure.Translation
// This is required because we have a implicit context load at the start of the function,
// but if there is a jump to the start of the function, the context load would trash the modified values.
// Here we insert a new entry block that will jump to the existing entry block.
BasicBlock newEntry = new BasicBlock(cfg.Blocks.Count);
BasicBlock newEntry = new(cfg.Blocks.Count);
cfg.UpdateEntry(newEntry);
}

View File

@@ -47,7 +47,7 @@ namespace ARMeilleure.Translation
DefMap[] globalDefs = new DefMap[cfg.Blocks.Count];
Operand[] localDefs = new Operand[cfg.LocalsCount + RegisterConsts.TotalCount];
Queue<BasicBlock> dfPhiBlocks = new Queue<BasicBlock>();
Queue<BasicBlock> dfPhiBlocks = new();
for (BasicBlock block = cfg.Blocks.First; block != null; block = block.ListNext)
{

View File

@@ -222,7 +222,7 @@ namespace ARMeilleure.Translation
internal TranslatedFunction Translate(ulong address, ExecutionMode mode, bool highCq, bool singleStep = false)
{
ArmEmitterContext context = new ArmEmitterContext(
ArmEmitterContext context = new(
Memory,
CountTable,
FunctionTable,
@@ -260,7 +260,7 @@ namespace ARMeilleure.Translation
Logger.EndPass(PassName.RegisterUsage);
OperandType retType = OperandType.I64;
OperandType[] argTypes = new OperandType[] { OperandType.I64 };
OperandType[] argTypes = [OperandType.I64];
CompilerOptions options = highCq ? CompilerOptions.HighCq : CompilerOptions.None;
@@ -478,7 +478,7 @@ namespace ARMeilleure.Translation
public void InvalidateJitCacheRegion(ulong address, ulong size)
{
ulong[] overlapAddresses = Array.Empty<ulong>();
ulong[] overlapAddresses = [];
int overlapsCount = Functions.GetOverlaps(address, size, ref overlapAddresses);

View File

@@ -36,7 +36,7 @@ namespace ARMeilleure.Translation
Sync = new object();
_requests = new Stack<RejitRequest>();
_requestAddresses = new HashSet<ulong>();
_requestAddresses = [];
}
/// <summary>

View File

@@ -142,7 +142,7 @@ namespace ARMeilleure.Translation
/// <returns>Generated <see cref="DispatchStub"/></returns>
private nint GenerateDispatchStub()
{
EmitterContext context = new EmitterContext();
EmitterContext context = new();
Operand lblFallback = Label();
Operand lblEnd = Label();
@@ -187,7 +187,7 @@ namespace ARMeilleure.Translation
ControlFlowGraph cfg = context.GetControlFlowGraph();
OperandType retType = OperandType.I64;
OperandType[] argTypes = new[] { OperandType.I64 };
OperandType[] argTypes = [OperandType.I64];
GuestFunction func = Compiler.Compile(cfg, argTypes, retType, CompilerOptions.HighCq, RuntimeInformation.ProcessArchitecture).Map<GuestFunction>();
@@ -200,7 +200,7 @@ namespace ARMeilleure.Translation
/// <returns>Generated <see cref="SlowDispatchStub"/></returns>
private nint GenerateSlowDispatchStub()
{
EmitterContext context = new EmitterContext();
EmitterContext context = new();
// Load the target guest address from the native context.
Operand nativeContext = context.LoadArgument(OperandType.I64, 0);
@@ -212,7 +212,7 @@ namespace ARMeilleure.Translation
ControlFlowGraph cfg = context.GetControlFlowGraph();
OperandType retType = OperandType.I64;
OperandType[] argTypes = new[] { OperandType.I64 };
OperandType[] argTypes = [OperandType.I64];
GuestFunction func = Compiler.Compile(cfg, argTypes, retType, CompilerOptions.HighCq, RuntimeInformation.ProcessArchitecture).Map<GuestFunction>();
@@ -251,7 +251,7 @@ namespace ARMeilleure.Translation
/// <returns><see cref="DispatchLoop"/> function</returns>
private DispatcherFunction GenerateDispatchLoop()
{
EmitterContext context = new EmitterContext();
EmitterContext context = new();
Operand beginLbl = Label();
Operand endLbl = Label();
@@ -281,7 +281,7 @@ namespace ARMeilleure.Translation
ControlFlowGraph cfg = context.GetControlFlowGraph();
OperandType retType = OperandType.None;
OperandType[] argTypes = new[] { OperandType.I64, OperandType.I64 };
OperandType[] argTypes = [OperandType.I64, OperandType.I64];
return Compiler.Compile(cfg, argTypes, retType, CompilerOptions.HighCq, RuntimeInformation.ProcessArchitecture).Map<DispatcherFunction>();
}
@@ -292,7 +292,7 @@ namespace ARMeilleure.Translation
/// <returns><see cref="ContextWrapper"/> function</returns>
private WrapperFunction GenerateContextWrapper()
{
EmitterContext context = new EmitterContext();
EmitterContext context = new();
Operand nativeContext = context.LoadArgument(OperandType.I64, 0);
Operand guestMethod = context.LoadArgument(OperandType.I64, 1);
@@ -305,7 +305,7 @@ namespace ARMeilleure.Translation
ControlFlowGraph cfg = context.GetControlFlowGraph();
OperandType retType = OperandType.I64;
OperandType[] argTypes = new[] { OperandType.I64, OperandType.I64 };
OperandType[] argTypes = [OperandType.I64, OperandType.I64];
return Compiler.Compile(cfg, argTypes, retType, CompilerOptions.HighCq, RuntimeInformation.ProcessArchitecture).Map<WrapperFunction>();
}

View File

@@ -139,7 +139,7 @@ namespace ARMeilleure.Translation
ControlFlowGraph cfg = context.GetControlFlowGraph();
OperandType[] argTypes = new OperandType[] { OperandType.I64 };
OperandType[] argTypes = [OperandType.I64];
return Compiler.Compile(cfg, argTypes, OperandType.I32, CompilerOptions.HighCq, RuntimeInformation.ProcessArchitecture).Map<FpFlagsPInvokeTest>();
}

View File

@@ -31,19 +31,19 @@ namespace Ryujinx.Audio.Backends.CompatLayer
private const int Minus6dBInQ15 = (int)(0.501f * RawQ15One);
private const int Minus12dBInQ15 = (int)(0.251f * RawQ15One);
private static readonly long[] _defaultSurroundToStereoCoefficients = new long[4]
{
private static readonly long[] _defaultSurroundToStereoCoefficients =
[
RawQ15One,
Minus3dBInQ15,
Minus12dBInQ15,
Minus3dBInQ15,
};
Minus3dBInQ15
];
private static readonly long[] _defaultStereoToMonoCoefficients = new long[2]
{
private static readonly long[] _defaultStereoToMonoCoefficients =
[
Minus6dBInQ15,
Minus6dBInQ15,
};
Minus6dBInQ15
];
private const int SurroundChannelCount = 6;
private const int StereoChannelCount = 2;

View File

@@ -164,12 +164,12 @@ namespace Ryujinx.Audio
/// <summary>
/// The default coefficients used for standard 5.1 surround to stereo downmixing.
/// </summary>
public static readonly float[] DefaultSurroundToStereoCoefficients = new float[4]
{
public static readonly float[] DefaultSurroundToStereoCoefficients =
[
1.0f,
0.707f,
0.251f,
0.707f,
};
0.707f
];
}
}

View File

@@ -173,7 +173,7 @@ namespace Ryujinx.Audio.Input
// TODO: Detect if the driver supports audio input
}
return new[] { Constants.DefaultDeviceInputName };
return [Constants.DefaultDeviceInputName];
}
/// <summary>

View File

@@ -167,7 +167,7 @@ namespace Ryujinx.Audio.Output
/// <returns>The list of all audio outputs name</returns>
public string[] ListAudioOuts()
{
return new[] { Constants.DefaultDeviceOutputName };
return [Constants.DefaultDeviceOutputName];
}
/// <summary>

View File

@@ -10,14 +10,14 @@ namespace Ryujinx.Audio.Renderer.Device
/// <summary>
/// All the defined virtual devices.
/// </summary>
public static readonly VirtualDevice[] Devices = new VirtualDevice[5]
{
public static readonly VirtualDevice[] Devices =
[
new("AudioStereoJackOutput", 2, true),
new("AudioBuiltInSpeakerOutput", 2, false),
new("AudioTvOutput", 6, false),
new("AudioUsbDeviceOutput", 2, true),
new("AudioExternalOutput", 6, true),
};
new("AudioExternalOutput", 6, true)
];
/// <summary>
/// The name of the <see cref="VirtualDevice"/>.

View File

@@ -46,7 +46,7 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
SampleRate = sampleRate;
BufferCount = mixBufferCount + voiceChannelCountMax;
Buffers = mixBuffer;
Commands = new List<ICommand>();
Commands = [];
MemoryManager = memoryManager;
_buffersEntryCount = Buffers.Length;

View File

@@ -9,21 +9,29 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
{
public class Reverb3dCommand : ICommand
{
private static readonly int[] _outputEarlyIndicesTableMono = new int[20] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
private static readonly int[] _targetEarlyDelayLineIndicesTableMono = new int[20] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 };
private static readonly int[] _targetOutputFeedbackIndicesTableMono = new int[1] { 0 };
private static readonly int[] _outputEarlyIndicesTableMono = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
];
private static readonly int[] _targetEarlyDelayLineIndicesTableMono = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19
];
private static readonly int[] _targetOutputFeedbackIndicesTableMono = [0];
private static readonly int[] _outputEarlyIndicesTableStereo = new int[20] { 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1 };
private static readonly int[] _targetEarlyDelayLineIndicesTableStereo = new int[20] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 };
private static readonly int[] _targetOutputFeedbackIndicesTableStereo = new int[2] { 0, 1 };
private static readonly int[] _outputEarlyIndicesTableStereo = [0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1
];
private static readonly int[] _targetEarlyDelayLineIndicesTableStereo = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19
];
private static readonly int[] _targetOutputFeedbackIndicesTableStereo = [0, 1];
private static readonly int[] _outputEarlyIndicesTableQuadraphonic = new int[20] { 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 0, 0, 0, 0, 3, 3, 3 };
private static readonly int[] _targetEarlyDelayLineIndicesTableQuadraphonic = new int[20] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 };
private static readonly int[] _targetOutputFeedbackIndicesTableQuadraphonic = new int[4] { 0, 1, 2, 3 };
private static readonly int[] _outputEarlyIndicesTableQuadraphonic = [0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 0, 0, 0, 0, 3, 3, 3
];
private static readonly int[] _targetEarlyDelayLineIndicesTableQuadraphonic = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19
];
private static readonly int[] _targetOutputFeedbackIndicesTableQuadraphonic = [0, 1, 2, 3];
private static readonly int[] _outputEarlyIndicesTableSurround = new int[40] { 4, 5, 0, 5, 0, 5, 1, 5, 1, 5, 1, 5, 1, 5, 2, 5, 2, 5, 2, 5, 1, 5, 1, 5, 1, 5, 0, 5, 0, 5, 0, 5, 0, 5, 3, 5, 3, 5, 3, 5 };
private static readonly int[] _targetEarlyDelayLineIndicesTableSurround = new int[40] { 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 16, 16, 17, 17, 18, 18, 19, 19 };
private static readonly int[] _targetOutputFeedbackIndicesTableSurround = new int[6] { 0, 1, 2, 3, -1, 3 };
private static readonly int[] _outputEarlyIndicesTableSurround = [4, 5, 0, 5, 0, 5, 1, 5, 1, 5, 1, 5, 1, 5, 2, 5, 2, 5, 2, 5, 1, 5, 1, 5, 1, 5, 0, 5, 0, 5, 0, 5, 0, 5, 3, 5, 3, 5, 3, 5
];
private static readonly int[] _targetEarlyDelayLineIndicesTableSurround = [0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 16, 16, 17, 17, 18, 18, 19, 19
];
private static readonly int[] _targetOutputFeedbackIndicesTableSurround = [0, 1, 2, 3, -1, 3];
public bool Enabled { get; set; }

View File

@@ -9,25 +9,27 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
{
public class ReverbCommand : ICommand
{
private static readonly int[] _outputEarlyIndicesTableMono = new int[10] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
private static readonly int[] _targetEarlyDelayLineIndicesTableMono = new int[10] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
private static readonly int[] _outputIndicesTableMono = new int[4] { 0, 0, 0, 0 };
private static readonly int[] _targetOutputFeedbackIndicesTableMono = new int[4] { 0, 1, 2, 3 };
private static readonly int[] _outputEarlyIndicesTableMono = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
private static readonly int[] _targetEarlyDelayLineIndicesTableMono = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
private static readonly int[] _outputIndicesTableMono = [0, 0, 0, 0];
private static readonly int[] _targetOutputFeedbackIndicesTableMono = [0, 1, 2, 3];
private static readonly int[] _outputEarlyIndicesTableStereo = new int[10] { 0, 0, 1, 1, 0, 1, 0, 0, 1, 1 };
private static readonly int[] _targetEarlyDelayLineIndicesTableStereo = new int[10] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
private static readonly int[] _outputIndicesTableStereo = new int[4] { 0, 0, 1, 1 };
private static readonly int[] _targetOutputFeedbackIndicesTableStereo = new int[4] { 2, 0, 3, 1 };
private static readonly int[] _outputEarlyIndicesTableStereo = [0, 0, 1, 1, 0, 1, 0, 0, 1, 1];
private static readonly int[] _targetEarlyDelayLineIndicesTableStereo = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
private static readonly int[] _outputIndicesTableStereo = [0, 0, 1, 1];
private static readonly int[] _targetOutputFeedbackIndicesTableStereo = [2, 0, 3, 1];
private static readonly int[] _outputEarlyIndicesTableQuadraphonic = new int[10] { 0, 0, 1, 1, 0, 1, 2, 2, 3, 3 };
private static readonly int[] _targetEarlyDelayLineIndicesTableQuadraphonic = new int[10] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
private static readonly int[] _outputIndicesTableQuadraphonic = new int[4] { 0, 1, 2, 3 };
private static readonly int[] _targetOutputFeedbackIndicesTableQuadraphonic = new int[4] { 0, 1, 2, 3 };
private static readonly int[] _outputEarlyIndicesTableQuadraphonic = [0, 0, 1, 1, 0, 1, 2, 2, 3, 3];
private static readonly int[] _targetEarlyDelayLineIndicesTableQuadraphonic = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
private static readonly int[] _outputIndicesTableQuadraphonic = [0, 1, 2, 3];
private static readonly int[] _targetOutputFeedbackIndicesTableQuadraphonic = [0, 1, 2, 3];
private static readonly int[] _outputEarlyIndicesTableSurround = new int[20] { 0, 5, 0, 5, 1, 5, 1, 5, 4, 5, 4, 5, 2, 5, 2, 5, 3, 5, 3, 5 };
private static readonly int[] _targetEarlyDelayLineIndicesTableSurround = new int[20] { 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9 };
private static readonly int[] _outputIndicesTableSurround = new int[Constants.ChannelCountMax] { 0, 1, 2, 3, 4, 5 };
private static readonly int[] _targetOutputFeedbackIndicesTableSurround = new int[Constants.ChannelCountMax] { 0, 1, 2, 3, -1, 3 };
private static readonly int[] _outputEarlyIndicesTableSurround = [0, 5, 0, 5, 1, 5, 1, 5, 4, 5, 4, 5, 2, 5, 2, 5, 3, 5, 3, 5
];
private static readonly int[] _targetEarlyDelayLineIndicesTableSurround = [0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9
];
private static readonly int[] _outputIndicesTableSurround = [0, 1, 2, 3, 4, 5];
private static readonly int[] _targetOutputFeedbackIndicesTableSurround = [0, 1, 2, 3, -1, 3];
public bool Enabled { get; set; }

View File

@@ -10,7 +10,8 @@ namespace Ryujinx.Audio.Renderer.Dsp
public static class ResamplerHelper
{
#region "Default Quality Lookup Tables"
private static readonly short[] _normalCurveLut0 = {
private static readonly short[] _normalCurveLut0 =
[
6600, 19426, 6722, 3, 6479, 19424, 6845, 9, 6359, 19419, 6968, 15, 6239, 19412, 7093, 22,
6121, 19403, 7219, 28, 6004, 19391, 7345, 34, 5888, 19377, 7472, 41, 5773, 19361, 7600, 48,
5659, 19342, 7728, 55, 5546, 19321, 7857, 62, 5434, 19298, 7987, 69, 5323, 19273, 8118, 77,
@@ -42,10 +43,11 @@ namespace Ryujinx.Audio.Renderer.Dsp
109, 8646, 19148, 4890, 101, 8513, 19183, 4997, 92, 8381, 19215, 5104, 84, 8249, 19245, 5213,
77, 8118, 19273, 5323, 69, 7987, 19298, 5434, 62, 7857, 19321, 5546, 55, 7728, 19342, 5659,
48, 7600, 19361, 5773, 41, 7472, 19377, 5888, 34, 7345, 19391, 6004, 28, 7219, 19403, 6121,
22, 7093, 19412, 6239, 15, 6968, 19419, 6359, 9, 6845, 19424, 6479, 3, 6722, 19426, 6600,
};
22, 7093, 19412, 6239, 15, 6968, 19419, 6359, 9, 6845, 19424, 6479, 3, 6722, 19426, 6600
];
private static readonly short[] _normalCurveLut1 = {
private static readonly short[] _normalCurveLut1 =
[
-68, 32639, 69, -5, -200, 32630, 212, -15, -328, 32613, 359, -26, -450, 32586, 512, -36,
-568, 32551, 669, -47, -680, 32507, 832, -58, -788, 32454, 1000, -69, -891, 32393, 1174, -80,
-990, 32323, 1352, -92, -1084, 32244, 1536, -103, -1173, 32157, 1724, -115, -1258, 32061, 1919, -128,
@@ -77,10 +79,11 @@ namespace Ryujinx.Audio.Renderer.Dsp
-180, 2747, 31593, -1554, -167, 2532, 31723, -1486, -153, 2322, 31844, -1414, -140, 2118, 31956, -1338,
-128, 1919, 32061, -1258, -115, 1724, 32157, -1173, -103, 1536, 32244, -1084, -92, 1352, 32323, -990,
-80, 1174, 32393, -891, -69, 1000, 32454, -788, -58, 832, 32507, -680, -47, 669, 32551, -568,
-36, 512, 32586, -450, -26, 359, 32613, -328, -15, 212, 32630, -200, -5, 69, 32639, -68,
};
-36, 512, 32586, -450, -26, 359, 32613, -328, -15, 212, 32630, -200, -5, 69, 32639, -68
];
private static readonly short[] _normalCurveLut2 = {
private static readonly short[] _normalCurveLut2 =
[
3195, 26287, 3329, -32, 3064, 26281, 3467, -34, 2936, 26270, 3608, -38, 2811, 26253, 3751, -42,
2688, 26230, 3897, -46, 2568, 26202, 4046, -50, 2451, 26169, 4199, -54, 2338, 26130, 4354, -58,
2227, 26085, 4512, -63, 2120, 26035, 4673, -67, 2015, 25980, 4837, -72, 1912, 25919, 5004, -76,
@@ -112,12 +115,13 @@ namespace Ryujinx.Audio.Renderer.Dsp
-98, 5701, 25621, 1531, -92, 5522, 25704, 1622, -87, 5347, 25780, 1716, -81, 5174, 25852, 1813,
-76, 5004, 25919, 1912, -72, 4837, 25980, 2015, -67, 4673, 26035, 2120, -63, 4512, 26085, 2227,
-58, 4354, 26130, 2338, -54, 4199, 26169, 2451, -50, 4046, 26202, 2568, -46, 3897, 26230, 2688,
-42, 3751, 26253, 2811, -38, 3608, 26270, 2936, -34, 3467, 26281, 3064, -32, 3329, 26287, 3195,
};
-42, 3751, 26253, 2811, -38, 3608, 26270, 2936, -34, 3467, 26281, 3064, -32, 3329, 26287, 3195
];
#endregion
#region "High Quality Lookup Tables"
private static readonly short[] _highCurveLut0 = {
private static readonly short[] _highCurveLut0 =
[
-582, -23, 8740, 16386, 8833, 8, -590, 0, -573, -54, 8647, 16385, 8925, 40, -598, -1,
-565, -84, 8555, 16383, 9018, 72, -606, -1, -557, -113, 8462, 16379, 9110, 105, -614, -2,
-549, -142, 8370, 16375, 9203, 139, -622, -2, -541, -170, 8277, 16369, 9295, 173, -630, -3,
@@ -181,10 +185,11 @@ namespace Ryujinx.Audio.Renderer.Dsp
-5, -646, 244, 9480, 16354, 8093, -225, -525, -4, -638, 208, 9387, 16362, 8185, -198, -533,
-3, -630, 173, 9295, 16369, 8277, -170, -541, -2, -622, 139, 9203, 16375, 8370, -142, -549,
-2, -614, 105, 9110, 16379, 8462, -113, -557, -1, -606, 72, 9018, 16383, 8555, -84, -565,
-1, -598, 40, 8925, 16385, 8647, -54, -573, 0, -590, 8, 8833, 16386, 8740, -23, -582,
};
-1, -598, 40, 8925, 16385, 8647, -54, -573, 0, -590, 8, 8833, 16386, 8740, -23, -582
];
private static readonly short[] _highCurveLut1 = {
private static readonly short[] _highCurveLut1 =
[
-12, 47, -134, 32767, 81, -16, 2, 0, -26, 108, -345, 32760, 301, -79, 17, -1,
-40, 168, -552, 32745, 526, -144, 32, -2, -53, 226, -753, 32723, 755, -210, 47, -3,
-66, 284, -950, 32694, 989, -277, 63, -5, -78, 340, -1143, 32658, 1226, -346, 79, -6,
@@ -248,10 +253,11 @@ namespace Ryujinx.Audio.Renderer.Dsp
-9, 113, -486, 1715, 32564, -1514, 447, -101, -8, 96, -415, 1469, 32615, -1331, 394, -90,
-6, 79, -346, 1226, 32658, -1143, 340, -78, -5, 63, -277, 989, 32694, -950, 284, -66,
-3, 47, -210, 755, 32723, -753, 226, -53, -2, 32, -144, 526, 32745, -552, 168, -40,
-1, 17, -79, 301, 32760, -345, 108, -26, 0, 2, -16, 81, 32767, -134, 47, -12,
};
-1, 17, -79, 301, 32760, -345, 108, -26, 0, 2, -16, 81, 32767, -134, 47, -12
];
private static readonly short[] _highCurveLut2 = {
private static readonly short[] _highCurveLut2 =
[
418, -2538, 6118, 24615, 6298, -2563, 417, 0, 420, -2512, 5939, 24611, 6479, -2588, 415, 1,
421, -2485, 5761, 24605, 6662, -2612, 412, 2, 422, -2458, 5585, 24595, 6846, -2635, 409, 3,
423, -2430, 5410, 24582, 7030, -2658, 406, 4, 423, -2402, 5236, 24565, 7216, -2680, 403, 5,
@@ -315,8 +321,8 @@ namespace Ryujinx.Audio.Renderer.Dsp
7, 395, -2721, 7591, 24523, 4893, -2343, 423, 6, 399, -2701, 7403, 24546, 5064, -2373, 423,
5, 403, -2680, 7216, 24565, 5236, -2402, 423, 4, 406, -2658, 7030, 24582, 5410, -2430, 423,
3, 409, -2635, 6846, 24595, 5585, -2458, 422, 2, 412, -2612, 6662, 24605, 5761, -2485, 421,
1, 415, -2588, 6479, 24611, 5939, -2512, 420, 0, 417, -2563, 6298, 24615, 6118, -2538, 418,
};
1, 415, -2588, 6479, 24611, 5939, -2512, 420, 0, 417, -2563, 6298, 24615, 6118, -2538, 418
];
#endregion
private static readonly float[] _normalCurveLut0F;

View File

@@ -6,12 +6,14 @@ namespace Ryujinx.Audio.Renderer.Dsp.State
{
public struct Reverb3dState
{
private readonly float[] _fdnDelayMinTimes = new float[4] { 5.0f, 6.0f, 13.0f, 14.0f };
private readonly float[] _fdnDelayMaxTimes = new float[4] { 45.704f, 82.782f, 149.94f, 271.58f };
private readonly float[] _decayDelayMaxTimes1 = new float[4] { 17.0f, 13.0f, 9.0f, 7.0f };
private readonly float[] _decayDelayMaxTimes2 = new float[4] { 19.0f, 11.0f, 10.0f, 6.0f };
private readonly float[] _earlyDelayTimes = new float[20] { 0.017136f, 0.059154f, 0.16173f, 0.39019f, 0.42526f, 0.45541f, 0.68974f, 0.74591f, 0.83384f, 0.8595f, 0.0f, 0.075024f, 0.16879f, 0.2999f, 0.33744f, 0.3719f, 0.59901f, 0.71674f, 0.81786f, 0.85166f };
public readonly float[] EarlyGain = new float[20] { 0.67096f, 0.61027f, 1.0f, 0.35680f, 0.68361f, 0.65978f, 0.51939f, 0.24712f, 0.45945f, 0.45021f, 0.64196f, 0.54879f, 0.92925f, 0.38270f, 0.72867f, 0.69794f, 0.5464f, 0.24563f, 0.45214f, 0.44042f };
private readonly float[] _fdnDelayMinTimes = [5.0f, 6.0f, 13.0f, 14.0f];
private readonly float[] _fdnDelayMaxTimes = [45.704f, 82.782f, 149.94f, 271.58f];
private readonly float[] _decayDelayMaxTimes1 = [17.0f, 13.0f, 9.0f, 7.0f];
private readonly float[] _decayDelayMaxTimes2 = [19.0f, 11.0f, 10.0f, 6.0f];
private readonly float[] _earlyDelayTimes = [0.017136f, 0.059154f, 0.16173f, 0.39019f, 0.42526f, 0.45541f, 0.68974f, 0.74591f, 0.83384f, 0.8595f, 0.0f, 0.075024f, 0.16879f, 0.2999f, 0.33744f, 0.3719f, 0.59901f, 0.71674f, 0.81786f, 0.85166f
];
public readonly float[] EarlyGain = [0.67096f, 0.61027f, 1.0f, 0.35680f, 0.68361f, 0.65978f, 0.51939f, 0.24712f, 0.45945f, 0.45021f, 0.64196f, 0.54879f, 0.92925f, 0.38270f, 0.72867f, 0.69794f, 0.5464f, 0.24563f, 0.45214f, 0.44042f
];
public IDelayLine[] FdnDelayLines { get; }
public DecayDelay[] DecayDelays1 { get; }

View File

@@ -7,8 +7,8 @@ namespace Ryujinx.Audio.Renderer.Dsp.State
{
public struct ReverbState
{
private static readonly float[] _fdnDelayTimes = new float[20]
{
private static readonly float[] _fdnDelayTimes =
[
// Room
53.953247f, 79.192566f, 116.238770f, 130.615295f,
// Hall
@@ -18,11 +18,11 @@ namespace Ryujinx.Audio.Renderer.Dsp.State
// Cathedral
47.03f, 71f, 103f, 170f,
// Max delay (Hall is the one with the highest values so identical to Hall)
53.953247f, 79.192566f, 116.238770f, 170.615295f,
};
53.953247f, 79.192566f, 116.238770f, 170.615295f
];
private static readonly float[] _decayDelayTimes = new float[20]
{
private static readonly float[] _decayDelayTimes =
[
// Room
7f, 9f, 13f, 17f,
// Hall
@@ -32,11 +32,11 @@ namespace Ryujinx.Audio.Renderer.Dsp.State
// Cathedral
7f, 7f, 13f, 9f,
// Max delay (Hall is the one with the highest values so identical to Hall)
7f, 9f, 13f, 17f,
};
7f, 9f, 13f, 17f
];
private static readonly float[] _earlyDelayTimes = new float[50]
{
private static readonly float[] _earlyDelayTimes =
[
// Room
0.0f, 3.5f, 2.8f, 3.9f, 2.7f, 13.4f, 7.9f, 8.4f, 9.9f, 12.0f,
// Chamber
@@ -46,11 +46,11 @@ namespace Ryujinx.Audio.Renderer.Dsp.State
// Cathedral
33.1f, 43.3f, 22.8f, 37.9f, 14.9f, 35.3f, 17.9f, 34.2f, 0.0f, 43.3f,
// Disabled
0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f,
};
0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f
];
private static readonly float[] _earlyGainBase = new float[50]
{
private static readonly float[] _earlyGainBase =
[
// Room
0.70f, 0.68f, 0.70f, 0.68f, 0.70f, 0.68f, 0.70f, 0.68f, 0.68f, 0.68f,
// Chamber
@@ -60,11 +60,11 @@ namespace Ryujinx.Audio.Renderer.Dsp.State
// Cathedral
0.93f, 0.92f, 0.87f, 0.86f, 0.94f, 0.81f, 0.80f, 0.77f, 0.76f, 0.65f,
// Disabled
0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f,
};
0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f
];
private static readonly float[] _preDelayTimes = new float[5]
{
private static readonly float[] _preDelayTimes =
[
// Room
12.5f,
// Chamber
@@ -74,8 +74,8 @@ namespace Ryujinx.Audio.Renderer.Dsp.State
// Cathedral
50.0f,
// Disabled
0.0f,
};
0.0f
];
public DelayLine[] FdnDelayLines { get; }
public DecayDelay[] DecayDelays { get; }

View File

@@ -436,7 +436,7 @@ namespace Ryujinx.Audio.Renderer.Server
return result;
}
PoolMapper poolMapper = new PoolMapper(_processHandle, _memoryPools, _behaviourContext.IsMemoryPoolForceMappingEnabled());
PoolMapper poolMapper = new(_processHandle, _memoryPools, _behaviourContext.IsMemoryPoolForceMappingEnabled());
result = stateUpdater.UpdateVoices(_voiceContext, poolMapper);

View File

@@ -83,7 +83,7 @@ namespace Ryujinx.BuildValidationTasks
if (isGitRunner && encounteredIssue)
throw new JsonException("1 or more locales are invalid!");
JsonSerializerOptions jsonOptions = new JsonSerializerOptions()
JsonSerializerOptions jsonOptions = new()
{
WriteIndented = true,
NewLine = "\n",

View File

@@ -106,7 +106,7 @@ namespace Ryujinx.Common.Collections
/// <returns>A list of all RangeNodes sorted by Key Order</returns>
public List<RangeNode<TKey, TValue>> AsList()
{
List<RangeNode<TKey, TValue>> list = new();
List<RangeNode<TKey, TValue>> list = [];
AddToList(Root, list);

View File

@@ -139,7 +139,7 @@ namespace Ryujinx.Common.Collections
/// <param name="list">List to add the tree pairs into</param>
public List<KeyValuePair<TKey, TValue>> AsLevelOrderList()
{
List<KeyValuePair<TKey, TValue>> list = new();
List<KeyValuePair<TKey, TValue>> list = [];
Queue<Node<TKey, TValue>> nodes = new();
@@ -168,7 +168,7 @@ namespace Ryujinx.Common.Collections
/// <returns>A list of all KeyValuePairs sorted by Key Order</returns>
public List<KeyValuePair<TKey, TValue>> AsList()
{
List<KeyValuePair<TKey, TValue>> list = new();
List<KeyValuePair<TKey, TValue>> list = [];
AddToList(Root, list);

View File

@@ -8,7 +8,7 @@ namespace Ryujinx.Common.Configuration
public ModMetadata()
{
Mods = new List<Mod>();
Mods = [];
}
}
}

View File

@@ -164,7 +164,7 @@ namespace Ryujinx.Common.Extensions
// Not enough data in the current segment, try to peek for the data we need.
T buffer = default;
Span<byte> tempSpan = new Span<byte>(&buffer, sizeof(T));
Span<byte> tempSpan = new(&buffer, sizeof(T));
if (!reader.TryCopyTo(tempSpan))
{

View File

@@ -132,7 +132,7 @@ namespace Ryujinx.Common.Logging
_enabledClasses[index] = true;
}
_logTargets = new List<ILogTarget>();
_logTargets = [];
_time = Stopwatch.StartNew();
@@ -203,7 +203,7 @@ namespace Ryujinx.Common.Logging
public static IReadOnlyCollection<LogLevel> GetEnabledLevels()
{
Log?[] logs = new[] { Debug, Info, Warning, Error, Guest, AccessLog, Stub, Trace };
Log?[] logs = [Debug, Info, Warning, Error, Guest, AccessLog, Stub, Trace];
List<LogLevel> levels = new(logs.Length);
foreach (Log? log in logs)
{

View File

@@ -125,8 +125,8 @@ namespace Ryujinx.Common.PreciseSleep
}
private readonly Lock _lock = new();
private readonly List<NanosleepThread> _threads = new();
private readonly List<NanosleepThread> _active = new();
private readonly List<NanosleepThread> _threads = [];
private readonly List<NanosleepThread> _active = [];
private readonly Stack<NanosleepThread> _free = new();
private readonly AutoResetEvent _signalTarget;

View File

@@ -51,7 +51,7 @@ namespace Ryujinx.Common.SystemInterop
private long _lastId;
private readonly Lock _lock = new();
private readonly List<WaitingObject> _waitingObjects = new();
private readonly List<WaitingObject> _waitingObjects = [];
private WindowsGranularTimer()
{

View File

@@ -105,6 +105,7 @@ namespace Ryujinx.Common
"0100b04011742000", // Monster Hunter Rise
//Mario Franchise
"010021d00812a000", // Arcade Archives VS. SUPER MARIO BROS.
"01006d0017f7a000", // Mario & Luigi: Brothership
"010003000e146000", // Mario & Sonic at the Olympic Games Tokyo 2020
"010067300059a000", // Mario + Rabbids: Kingdom Battle
@@ -212,32 +213,41 @@ namespace Ryujinx.Common
//Misc Games
"010056e00853a000", // A Hat in Time
"0100fd1014726000", // Baldurs Gate: Dark Alliance
"0100c6800b934000", // Brawlhalla
"0100dbf01000a000", // Burnout Paradise Remastered
"0100744001588000", // Cars 3: Driven to Win
"0100b41013c82000", // Cruis'n Blast
"010085900337e000", // Death Squared
"01001b300b9be000", // Diablo III: Eternal Collection
"010027400cdc6000", // Divinity Original 2 - Definitive Edition
"01008c8012920000", // Dying Light Platinum Edition
"01001cc01b2d4000", // Goat Simulator 3
"01003620068ea000", // Hand of Fate 2
"010085500130a000", // Lego City: Undercover
"010073c01af34000", // LEGO Horizon Adventures
"0100d71004694000", // Minecraft
"01007430037f6000", // Monopoly
"0100853015e86000", // No Man's Sky
"01007bb017812000", // Portal
"0100abd01785c000", // Portal 2
"01008e200c5c2000", // Muse Dash
"01007820196a6000", // Red Dead Redemption
"0100e8300a67a000", // Risk
"01002f7013224000", // Rune Factory 5
"01008d100d43e000", // Saints Row IV
"0100de600beee000", // Saints Row: The Third - The Full Package
"01001180021fa000", // Shovel Knight: Specter of Torment
"0100e65002bb8000", // Stardew Valley
"0100d7a01b7a2000", // Star Wars: Bounty Hunter
"0100800015926000", // Suika Game
"01007ad00013e000", // Super Bomberman R
"0100e46006708000", // Terraria
"0100605008268000", // Titan Quest
"01000a10041ea000", // The Elder Scrolls V: Skyrim
"010057a01e4d4000", // TSUKIHIME -A piece of blue glass moon-
"010080b00ad66000", // Undertale
"010069401adb8000", // Unicorn Overlord
"01005c600ac68000", // Valkyria Chronicles 4
"0100534009ff2000", // Yonder - The cloud catcher chronicles
];
}

View File

@@ -91,7 +91,7 @@ namespace Ryujinx.Common
return null;
}
using StreamReader reader = new StreamReader(stream);
using StreamReader reader = new(stream);
return reader.ReadToEnd();
}
@@ -103,7 +103,7 @@ namespace Ryujinx.Common
return null;
}
using StreamReader reader = new StreamReader(stream);
using StreamReader reader = new(stream);
return await reader.ReadToEndAsync();
}

View File

@@ -9,7 +9,7 @@ namespace Ryujinx.Common.Utilities
public static void CopyDirectory(string sourceDir, string destinationDir, bool recursive)
{
// Get information about the source directory
DirectoryInfo dir = new DirectoryInfo(sourceDir);
DirectoryInfo dir = new(sourceDir);
// Check if the source directory exists
if (!dir.Exists)
@@ -49,7 +49,7 @@ namespace Ryujinx.Common.Utilities
public static string SanitizeFileName(string fileName)
{
HashSet<char> reservedChars = new HashSet<char>(Path.GetInvalidFileNameChars());
HashSet<char> reservedChars = new(Path.GetInvalidFileNameChars());
return string.Concat(fileName.Select(c => reservedChars.Contains(c) ? '_' : c));
}
}

View File

@@ -19,7 +19,7 @@ namespace Ryujinx.Common.Utilities
public static string Format(MessagePackObject obj)
{
IndentedStringBuilder builder = new IndentedStringBuilder();
IndentedStringBuilder builder = new();
FormatMsgPackObj(obj, builder);

View File

@@ -1,6 +1,7 @@
using Gommon;
using System;
using System.Drawing;
using System.Threading;
using System.Threading.Tasks;
namespace Ryujinx.Common.Utilities
@@ -18,7 +19,7 @@ namespace Ryujinx.Common.Utilities
{
while (CyclingEnabled)
{
await Task.Delay(15);
await Task.Delay(20);
Tick();
}
});
@@ -32,29 +33,47 @@ namespace Ryujinx.Common.Utilities
public static float Speed { get; set; } = 1;
private static readonly Lock _lock = new();
public static Color Color { get; private set; } = Color.Blue;
private static Color _color = Color.Blue;
public static ref Color Color
{
get
{
lock (_lock)
{
return ref _color;
}
}
}
public static void Tick()
{
Color = HsbToRgb((Color.GetHue() + Speed) / 360);
lock (_lock)
{
_color = HsbToRgb((_color.GetHue() + Speed) / 360);
UpdatedHandler.Call(Color.ToArgb());
_updatedHandler.Call(_color.ToArgb());
}
}
public static void Reset()
{
Color = Color.Blue;
UpdatedHandler.Clear();
_updatedHandler.Clear();
lock (_lock)
_color = Color.Blue;
}
public static event Action<int> Updated
{
add => UpdatedHandler.Add(value);
remove => UpdatedHandler.Remove(value);
add => _updatedHandler.Add(value);
remove => _updatedHandler.Remove(value);
}
internal static Event<int> UpdatedHandler = new();
private static readonly Event<int> _updatedHandler = new();
private static Color HsbToRgb(float hue, float saturation = 1, float brightness = 1)
{

View File

@@ -46,7 +46,7 @@ namespace Ryujinx.Common.Utilities
{
if (Path.GetExtension(filename).Equals(".XCI", StringComparison.InvariantCultureIgnoreCase))
{
XCIFileTrimmer trimmer = new XCIFileTrimmer(filename, log);
XCIFileTrimmer trimmer = new(filename, log);
return trimmer.CanBeTrimmed;
}
@@ -57,7 +57,7 @@ namespace Ryujinx.Common.Utilities
{
if (Path.GetExtension(filename).Equals(".XCI", StringComparison.InvariantCultureIgnoreCase))
{
XCIFileTrimmer trimmer = new XCIFileTrimmer(filename, log);
XCIFileTrimmer trimmer = new(filename, log);
return trimmer.CanBeUntrimmed;
}
@@ -267,7 +267,7 @@ namespace Ryujinx.Common.Utilities
try
{
FileInfo info = new FileInfo(Filename);
FileInfo info = new(Filename);
if ((info.Attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)
{
try
@@ -288,7 +288,7 @@ namespace Ryujinx.Common.Utilities
return OperationOutcome.FileSizeChanged;
}
FileStream outfileStream = new FileStream(_filename, FileMode.Open, FileAccess.Write, FileShare.Write);
FileStream outfileStream = new(_filename, FileMode.Open, FileAccess.Write, FileShare.Write);
try
{
@@ -327,7 +327,7 @@ namespace Ryujinx.Common.Utilities
{
Log?.Write(LogType.Info, "Untrimming...");
FileInfo info = new FileInfo(Filename);
FileInfo info = new(Filename);
if ((info.Attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)
{
try
@@ -348,7 +348,7 @@ namespace Ryujinx.Common.Utilities
return OperationOutcome.FileSizeChanged;
}
FileStream outfileStream = new FileStream(_filename, FileMode.Append, FileAccess.Write, FileShare.Write);
FileStream outfileStream = new(_filename, FileMode.Append, FileAccess.Write, FileShare.Write);
long bytesToWriteB = UntrimmedFileSizeB - FileSizeB;
try

View File

@@ -49,7 +49,7 @@ namespace ARMeilleure.Common
public TableSparseBlock(ulong size, Action<IntPtr> ensureMapped, PageInitDelegate pageInit)
{
SparseMemoryBlock block = new SparseMemoryBlock(size, pageInit, null);
SparseMemoryBlock block = new(size, pageInit, null);
_trackingEvent = (ulong address, ulong size, bool write) =>
{
@@ -164,7 +164,7 @@ namespace ARMeilleure.Common
_fillBottomLevel = new SparseMemoryBlock(bottomLevelSize, null, _sparseFill);
_fillBottomLevelPtr = (TEntry*)_fillBottomLevel.Block.Pointer;
_sparseReserved = new List<TableSparseBlock>();
_sparseReserved = [];
_sparseLock = new ReaderWriterLockSlim();
_sparseBlockSize = bottomLevelSize;
@@ -363,7 +363,7 @@ namespace ARMeilleure.Common
/// <returns>The new sparse block that was added</returns>
private TableSparseBlock ReserveNewSparseBlock()
{
TableSparseBlock block = new TableSparseBlock(_sparseBlockSize, EnsureMapped, InitLeafPage);
TableSparseBlock block = new(_sparseBlockSize, EnsureMapped, InitLeafPage);
_sparseReserved.Add(block);
_sparseReservedOffset = 0;
@@ -416,7 +416,7 @@ namespace ARMeilleure.Common
IntPtr address = (IntPtr)NativeAllocator.Instance.Allocate((uint)size);
page = new AddressTablePage(false, address);
Span<T> span = new Span<T>((void*)page.Address, length);
Span<T> span = new((void*)page.Address, length);
span.Fill(fill);
}

View File

@@ -21,7 +21,7 @@ namespace Ryujinx.Cpu.Jit.HostTracked
public AddressSpacePartitioned(MemoryTracking tracking, MemoryBlock backingMemory, NativePageTable nativePageTable, bool useProtectionMirrors)
{
_backingMemory = backingMemory;
_partitions = new();
_partitions = [];
_asAllocator = new(tracking, nativePageTable.Read, _partitions);
_updatePtCallback = nativePageTable.Update;
_useProtectionMirrors = useProtectionMirrors;

View File

@@ -340,7 +340,7 @@ namespace Ryujinx.Cpu.Jit
{
int pages = GetPagesCount(va, (uint)size, out va);
List<MemoryRange> regions = new List<MemoryRange>();
List<MemoryRange> regions = [];
ulong regionStart = GetPhysicalAddressChecked(va);
ulong regionSize = PageSize;

View File

@@ -443,7 +443,7 @@ namespace Ryujinx.Cpu.Jit
return null;
}
List<HostMemoryRange> regions = new List<HostMemoryRange>();
List<HostMemoryRange> regions = [];
ulong endVa = va + size;
try

View File

@@ -36,7 +36,7 @@ namespace Ryujinx.Cpu.LightningJit.Arm32
RegisterAllocator = registerAllocator;
MemoryManagerType = mmType;
_itConditions = new ArmCondition[4];
_pendingBranches = new();
_pendingBranches = [];
IsThumb = isThumb;
}

View File

@@ -10,8 +10,8 @@ namespace Ryujinx.Cpu.LightningJit.Arm32
{
public static MultiBlock DecodeMulti(CpuPreset cpuPreset, IMemoryManager memoryManager, ulong address, bool isThumb)
{
List<Block> blocks = new();
List<ulong> branchTargets = new();
List<Block> blocks = [];
List<ulong> branchTargets = [];
while (true)
{
@@ -202,7 +202,7 @@ namespace Ryujinx.Cpu.LightningJit.Arm32
{
ulong startAddress = address;
List<InstInfo> insts = new();
List<InstInfo> insts = [];
uint encoding;
InstMeta meta;

View File

@@ -9,494 +9,494 @@ namespace Ryujinx.Cpu.LightningJit.Arm32
static InstTableA32()
{
InstEncoding[] condConstraints = new InstEncoding[]
{
new(0xF0000000, 0xF0000000),
};
InstEncoding[] condConstraints =
[
new(0xF0000000, 0xF0000000)
];
InstEncoding[] condRnsRnConstraints = new InstEncoding[]
{
InstEncoding[] condRnsRnConstraints =
[
new(0xF0000000, 0xF0000000),
new(0x000F0000, 0x001F0000),
new(0x000D0000, 0x000F0000),
};
new(0x000D0000, 0x000F0000)
];
InstEncoding[] condRnConstraints = new InstEncoding[]
{
InstEncoding[] condRnConstraints =
[
new(0xF0000000, 0xF0000000),
new(0x000D0000, 0x000F0000),
};
new(0x000D0000, 0x000F0000)
];
InstEncoding[] vdVmConstraints = new InstEncoding[]
{
InstEncoding[] vdVmConstraints =
[
new(0x00001000, 0x00001000),
new(0x00000001, 0x00000001),
};
new(0x00000001, 0x00000001)
];
InstEncoding[] condRnConstraints2 = new InstEncoding[]
{
InstEncoding[] condRnConstraints2 =
[
new(0xF0000000, 0xF0000000),
new(0x0000000F, 0x0000000F),
};
new(0x0000000F, 0x0000000F)
];
InstEncoding[] optionConstraints = new InstEncoding[]
{
new(0x00000000, 0x0000000F),
};
InstEncoding[] optionConstraints =
[
new(0x00000000, 0x0000000F)
];
InstEncoding[] condPuwPwPuwPuwConstraints = new InstEncoding[]
{
InstEncoding[] condPuwPwPuwPuwConstraints =
[
new(0xF0000000, 0xF0000000),
new(0x00000000, 0x01A00000),
new(0x01000000, 0x01200000),
new(0x00200000, 0x01A00000),
new(0x01A00000, 0x01A00000),
};
new(0x01A00000, 0x01A00000)
];
InstEncoding[] condRnPuwConstraints = new InstEncoding[]
{
InstEncoding[] condRnPuwConstraints =
[
new(0xF0000000, 0xF0000000),
new(0x000F0000, 0x000F0000),
new(0x00000000, 0x01A00000),
};
new(0x00000000, 0x01A00000)
];
InstEncoding[] condPuwConstraints = new InstEncoding[]
{
InstEncoding[] condPuwConstraints =
[
new(0xF0000000, 0xF0000000),
new(0x00000000, 0x01A00000),
};
new(0x00000000, 0x01A00000)
];
InstEncoding[] condRnPwConstraints = new InstEncoding[]
{
InstEncoding[] condRnPwConstraints =
[
new(0xF0000000, 0xF0000000),
new(0x000F0000, 0x000F0000),
new(0x00200000, 0x01200000),
};
new(0x00200000, 0x01200000)
];
InstEncoding[] condPwConstraints = new InstEncoding[]
{
InstEncoding[] condPwConstraints =
[
new(0xF0000000, 0xF0000000),
new(0x00200000, 0x01200000),
};
new(0x00200000, 0x01200000)
];
InstEncoding[] condRnConstraints3 = new InstEncoding[]
{
InstEncoding[] condRnConstraints3 =
[
new(0xF0000000, 0xF0000000),
new(0x000F0000, 0x000F0000),
};
new(0x000F0000, 0x000F0000)
];
InstEncoding[] condMaskrConstraints = new InstEncoding[]
{
InstEncoding[] condMaskrConstraints =
[
new(0xF0000000, 0xF0000000),
new(0x00000000, 0x004F0000),
};
new(0x00000000, 0x004F0000)
];
InstEncoding[] rnConstraints = new InstEncoding[]
{
new(0x000F0000, 0x000F0000),
};
InstEncoding[] rnConstraints =
[
new(0x000F0000, 0x000F0000)
];
InstEncoding[] vdVnVmConstraints = new InstEncoding[]
{
InstEncoding[] vdVnVmConstraints =
[
new(0x00001000, 0x00001000),
new(0x00010000, 0x00010000),
new(0x00000001, 0x00000001),
};
new(0x00000001, 0x00000001)
];
InstEncoding[] condRaConstraints = new InstEncoding[]
{
InstEncoding[] condRaConstraints =
[
new(0xF0000000, 0xF0000000),
new(0x0000F000, 0x0000F000),
};
new(0x0000F000, 0x0000F000)
];
InstEncoding[] sizeQvdQvnQvmConstraints = new InstEncoding[]
{
InstEncoding[] sizeQvdQvnQvmConstraints =
[
new(0x00300000, 0x00300000),
new(0x00001040, 0x00001040),
new(0x00010040, 0x00010040),
new(0x00000041, 0x00000041),
};
new(0x00000041, 0x00000041)
];
InstEncoding[] sizeVdConstraints = new InstEncoding[]
{
InstEncoding[] sizeVdConstraints =
[
new(0x00300000, 0x00300000),
new(0x00001000, 0x00001000),
};
new(0x00001000, 0x00001000)
];
InstEncoding[] qvdQvnQvmConstraints = new InstEncoding[]
{
InstEncoding[] qvdQvnQvmConstraints =
[
new(0x00001040, 0x00001040),
new(0x00010040, 0x00010040),
new(0x00000041, 0x00000041),
};
new(0x00000041, 0x00000041)
];
InstEncoding[] sizeQvdQvmConstraints = new InstEncoding[]
{
InstEncoding[] sizeQvdQvmConstraints =
[
new(0x000C0000, 0x000C0000),
new(0x00001040, 0x00001040),
new(0x00000041, 0x00000041),
};
new(0x00000041, 0x00000041)
];
InstEncoding[] sizeVnVmConstraints = new InstEncoding[]
{
InstEncoding[] sizeVnVmConstraints =
[
new(0x00300000, 0x00300000),
new(0x00010000, 0x00010000),
new(0x00000001, 0x00000001),
};
new(0x00000001, 0x00000001)
];
InstEncoding[] sizeVdOpvnConstraints = new InstEncoding[]
{
InstEncoding[] sizeVdOpvnConstraints =
[
new(0x00300000, 0x00300000),
new(0x00001000, 0x00001000),
new(0x00010100, 0x00010100),
};
new(0x00010100, 0x00010100)
];
InstEncoding[] cmodeCmodeQvdConstraints = new InstEncoding[]
{
InstEncoding[] cmodeCmodeQvdConstraints =
[
new(0x00000000, 0x00000100),
new(0x00000C00, 0x00000C00),
new(0x00001040, 0x00001040),
};
new(0x00001040, 0x00001040)
];
InstEncoding[] qvdQvnQvmOpConstraints = new InstEncoding[]
{
InstEncoding[] qvdQvnQvmOpConstraints =
[
new(0x00001040, 0x00001040),
new(0x00010040, 0x00010040),
new(0x00000041, 0x00000041),
new(0x00000000, 0x00300000),
};
new(0x00000000, 0x00300000)
];
InstEncoding[] qvdQvnQvmSizeConstraints = new InstEncoding[]
{
InstEncoding[] qvdQvnQvmSizeConstraints =
[
new(0x00001040, 0x00001040),
new(0x00010040, 0x00010040),
new(0x00000041, 0x00000041),
new(0x00300000, 0x00300000),
};
new(0x00300000, 0x00300000)
];
InstEncoding[] qvdQvnConstraints = new InstEncoding[]
{
InstEncoding[] qvdQvnConstraints =
[
new(0x00001040, 0x00001040),
new(0x00010040, 0x00010040),
};
new(0x00010040, 0x00010040)
];
InstEncoding[] qvdQvmConstraints = new InstEncoding[]
{
InstEncoding[] qvdQvmConstraints =
[
new(0x00001040, 0x00001040),
new(0x00000041, 0x00000041),
};
new(0x00000041, 0x00000041)
];
InstEncoding[] sizeConstraints = new InstEncoding[]
{
new(0x00000000, 0x00000300),
};
InstEncoding[] sizeConstraints =
[
new(0x00000000, 0x00000300)
];
InstEncoding[] vmConstraints = new InstEncoding[]
{
new(0x00000001, 0x00000001),
};
InstEncoding[] vmConstraints =
[
new(0x00000001, 0x00000001)
];
InstEncoding[] opvdOpvmConstraints = new InstEncoding[]
{
InstEncoding[] opvdOpvmConstraints =
[
new(0x00001100, 0x00001100),
new(0x00000001, 0x00000101),
};
new(0x00000001, 0x00000101)
];
InstEncoding[] imm6Opimm6Imm6QvdQvmConstraints = new InstEncoding[]
{
InstEncoding[] imm6Opimm6Imm6QvdQvmConstraints =
[
new(0x00000000, 0x00380000),
new(0x00200000, 0x00300200),
new(0x00000000, 0x00200000),
new(0x00001040, 0x00001040),
new(0x00000041, 0x00000041),
};
new(0x00000041, 0x00000041)
];
InstEncoding[] condQvdEbConstraints = new InstEncoding[]
{
InstEncoding[] condQvdEbConstraints =
[
new(0xF0000000, 0xF0000000),
new(0x00210000, 0x00210000),
new(0x00400020, 0x00400020),
};
new(0x00400020, 0x00400020)
];
InstEncoding[] imm4QvdConstraints = new InstEncoding[]
{
InstEncoding[] imm4QvdConstraints =
[
new(0x00000000, 0x00070000),
new(0x00001040, 0x00001040),
};
new(0x00001040, 0x00001040)
];
InstEncoding[] qvdQvnQvmQimm4Constraints = new InstEncoding[]
{
InstEncoding[] qvdQvnQvmQimm4Constraints =
[
new(0x00001040, 0x00001040),
new(0x00010040, 0x00010040),
new(0x00000041, 0x00000041),
new(0x00000800, 0x00000840),
};
new(0x00000800, 0x00000840)
];
InstEncoding[] qvdConstraints = new InstEncoding[]
{
new(0x00001040, 0x00001040),
};
InstEncoding[] qvdConstraints =
[
new(0x00001040, 0x00001040)
];
InstEncoding[] vdVnConstraints = new InstEncoding[]
{
InstEncoding[] vdVnConstraints =
[
new(0x00001000, 0x00001000),
new(0x00010000, 0x00010000),
};
new(0x00010000, 0x00010000)
];
InstEncoding[] sizeConstraints2 = new InstEncoding[]
{
new(0x00000C00, 0x00000C00),
};
InstEncoding[] sizeConstraints2 =
[
new(0x00000C00, 0x00000C00)
];
InstEncoding[] sizeIndexAlignIndexAlignConstraints = new InstEncoding[]
{
InstEncoding[] sizeIndexAlignIndexAlignConstraints =
[
new(0x00000C00, 0x00000C00),
new(0x00000010, 0x00000030),
new(0x00000020, 0x00000030),
};
new(0x00000020, 0x00000030)
];
InstEncoding[] sizeSizeaConstraints = new InstEncoding[]
{
InstEncoding[] sizeSizeaConstraints =
[
new(0x000000C0, 0x000000C0),
new(0x00000010, 0x000000D0),
};
new(0x00000010, 0x000000D0)
];
InstEncoding[] alignConstraints = new InstEncoding[]
{
new(0x00000020, 0x00000020),
};
InstEncoding[] alignConstraints =
[
new(0x00000020, 0x00000020)
];
InstEncoding[] alignConstraints2 = new InstEncoding[]
{
InstEncoding[] alignConstraints2 =
[
new(0x00000030, 0x00000030)
];
InstEncoding[] sizeConstraints3 =
[
new(0x000000C0, 0x000000C0)
];
InstEncoding[] alignSizeConstraints =
[
new(0x00000030, 0x00000030),
};
new(0x000000C0, 0x000000C0)
];
InstEncoding[] sizeConstraints3 = new InstEncoding[]
{
InstEncoding[] sizeAConstraints =
[
new(0x000000C0, 0x000000C0),
};
new(0x00000010, 0x00000010)
];
InstEncoding[] alignSizeConstraints = new InstEncoding[]
{
new(0x00000030, 0x00000030),
InstEncoding[] sizeAlignConstraints =
[
new(0x000000C0, 0x000000C0),
};
new(0x00000020, 0x00000020)
];
InstEncoding[] sizeAConstraints = new InstEncoding[]
{
new(0x000000C0, 0x000000C0),
new(0x00000010, 0x00000010),
};
InstEncoding[] sizeAlignConstraints = new InstEncoding[]
{
new(0x000000C0, 0x000000C0),
new(0x00000020, 0x00000020),
};
InstEncoding[] sizeIndexAlignConstraints = new InstEncoding[]
{
InstEncoding[] sizeIndexAlignConstraints =
[
new(0x00000C00, 0x00000C00),
new(0x00000030, 0x00000030),
};
new(0x00000030, 0x00000030)
];
InstEncoding[] sizeaConstraints = new InstEncoding[]
{
new(0x000000C0, 0x000000D0),
};
InstEncoding[] sizeaConstraints =
[
new(0x000000C0, 0x000000D0)
];
InstEncoding[] sizeSizeVdConstraints = new InstEncoding[]
{
InstEncoding[] sizeSizeVdConstraints =
[
new(0x00300000, 0x00300000),
new(0x00000000, 0x00300000),
new(0x00001000, 0x00001000),
};
new(0x00001000, 0x00001000)
];
InstEncoding[] sizeQvdQvnConstraints = new InstEncoding[]
{
InstEncoding[] sizeQvdQvnConstraints =
[
new(0x00300000, 0x00300000),
new(0x01001000, 0x01001000),
new(0x01010000, 0x01010000),
};
new(0x01010000, 0x01010000)
];
InstEncoding[] imm3hImm3hImm3hImm3hImm3hVdConstraints = new InstEncoding[]
{
InstEncoding[] imm3hImm3hImm3hImm3hImm3hVdConstraints =
[
new(0x00000000, 0x00380000),
new(0x00180000, 0x00380000),
new(0x00280000, 0x00380000),
new(0x00300000, 0x00380000),
new(0x00380000, 0x00380000),
new(0x00001000, 0x00001000),
};
new(0x00001000, 0x00001000)
];
InstEncoding[] sizeVmConstraints = new InstEncoding[]
{
InstEncoding[] sizeVmConstraints =
[
new(0x000C0000, 0x000C0000),
new(0x00000001, 0x00000001),
};
new(0x00000001, 0x00000001)
];
InstEncoding[] condOpc1opc2Constraints = new InstEncoding[]
{
InstEncoding[] condOpc1opc2Constraints =
[
new(0xF0000000, 0xF0000000),
new(0x00000040, 0x00400060),
};
new(0x00000040, 0x00400060)
];
InstEncoding[] condUopc1opc2Uopc1opc2Constraints = new InstEncoding[]
{
InstEncoding[] condUopc1opc2Uopc1opc2Constraints =
[
new(0xF0000000, 0xF0000000),
new(0x00800000, 0x00C00060),
new(0x00000040, 0x00400060),
};
new(0x00000040, 0x00400060)
];
InstEncoding[] sizeOpuOpsizeVdConstraints = new InstEncoding[]
{
InstEncoding[] sizeOpuOpsizeVdConstraints =
[
new(0x00300000, 0x00300000),
new(0x01000200, 0x01000200),
new(0x00100200, 0x00300200),
new(0x00001000, 0x00001000),
};
new(0x00001000, 0x00001000)
];
InstEncoding[] sizeOpsizeOpsizeQvdQvnQvmConstraints = new InstEncoding[]
{
InstEncoding[] sizeOpsizeOpsizeQvdQvnQvmConstraints =
[
new(0x00300000, 0x00300000),
new(0x01100000, 0x01300000),
new(0x01200000, 0x01300000),
new(0x00001040, 0x00001040),
new(0x00010040, 0x00010040),
new(0x00000041, 0x00000041),
};
new(0x00000041, 0x00000041)
];
InstEncoding[] cmodeQvdConstraints = new InstEncoding[]
{
InstEncoding[] cmodeQvdConstraints =
[
new(0x00000E00, 0x00000E00),
new(0x00001040, 0x00001040),
};
new(0x00001040, 0x00001040)
];
InstEncoding[] qConstraints = new InstEncoding[]
{
new(0x00000040, 0x00000040),
};
InstEncoding[] qConstraints =
[
new(0x00000040, 0x00000040)
];
InstEncoding[] sizeQConstraints = new InstEncoding[]
{
InstEncoding[] sizeQConstraints =
[
new(0x00300000, 0x00300000),
new(0x00000040, 0x00000040),
};
new(0x00000040, 0x00000040)
];
InstEncoding[] sizeConstraints4 = new InstEncoding[]
{
new(0x00300000, 0x00300000),
};
InstEncoding[] sizeConstraints4 =
[
new(0x00300000, 0x00300000)
];
InstEncoding[] qvdQvnQvmSizeSizeConstraints = new InstEncoding[]
{
InstEncoding[] qvdQvnQvmSizeSizeConstraints =
[
new(0x00001040, 0x00001040),
new(0x00010040, 0x00010040),
new(0x00000041, 0x00000041),
new(0x00000000, 0x00300000),
new(0x00300000, 0x00300000),
};
new(0x00300000, 0x00300000)
];
InstEncoding[] sizeSizeQvdQvnConstraints = new InstEncoding[]
{
InstEncoding[] sizeSizeQvdQvnConstraints =
[
new(0x00300000, 0x00300000),
new(0x00000000, 0x00300000),
new(0x01001000, 0x01001000),
new(0x01010000, 0x01010000),
};
new(0x01010000, 0x01010000)
];
InstEncoding[] opSizeVmConstraints = new InstEncoding[]
{
InstEncoding[] opSizeVmConstraints =
[
new(0x00000000, 0x000000C0),
new(0x000C0000, 0x000C0000),
new(0x00000001, 0x00000001),
};
new(0x00000001, 0x00000001)
];
InstEncoding[] qvdQvmQvnConstraints = new InstEncoding[]
{
InstEncoding[] qvdQvmQvnConstraints =
[
new(0x00001040, 0x00001040),
new(0x00000041, 0x00000041),
new(0x00010040, 0x00010040),
};
new(0x00010040, 0x00010040)
];
InstEncoding[] imm6UopVmConstraints = new InstEncoding[]
{
InstEncoding[] imm6UopVmConstraints =
[
new(0x00000000, 0x00380000),
new(0x00000000, 0x01000100),
new(0x00000001, 0x00000001),
};
new(0x00000001, 0x00000001)
];
InstEncoding[] imm6lUopQvdQvmConstraints = new InstEncoding[]
{
InstEncoding[] imm6lUopQvdQvmConstraints =
[
new(0x00000000, 0x00380080),
new(0x00000000, 0x01000100),
new(0x00001040, 0x00001040),
new(0x00000041, 0x00000041),
};
new(0x00000041, 0x00000041)
];
InstEncoding[] qvdQvmSizeSizeConstraints = new InstEncoding[]
{
InstEncoding[] qvdQvmSizeSizeConstraints =
[
new(0x00001040, 0x00001040),
new(0x00000041, 0x00000041),
new(0x00000000, 0x000C0000),
new(0x000C0000, 0x000C0000),
};
new(0x000C0000, 0x000C0000)
];
InstEncoding[] sizeSizeSizeQvdQvmConstraints = new InstEncoding[]
{
InstEncoding[] sizeSizeSizeQvdQvmConstraints =
[
new(0x00040000, 0x000C0000),
new(0x00080000, 0x000C0000),
new(0x000C0000, 0x000C0000),
new(0x00001040, 0x00001040),
new(0x00000041, 0x00000041),
};
new(0x00000041, 0x00000041)
];
InstEncoding[] sizeSizeQvdQvmConstraints = new InstEncoding[]
{
InstEncoding[] sizeSizeQvdQvmConstraints =
[
new(0x00080000, 0x000C0000),
new(0x000C0000, 0x000C0000),
new(0x00001040, 0x00001040),
new(0x00000041, 0x00000041),
};
new(0x00000041, 0x00000041)
];
InstEncoding[] imm6lQvdQvmConstraints = new InstEncoding[]
{
InstEncoding[] imm6lQvdQvmConstraints =
[
new(0x00000000, 0x00380080),
new(0x00001040, 0x00001040),
new(0x00000041, 0x00000041),
};
new(0x00000041, 0x00000041)
];
InstEncoding[] imm6VmConstraints = new InstEncoding[]
{
InstEncoding[] imm6VmConstraints =
[
new(0x00000000, 0x00380000),
new(0x00000001, 0x00000001),
};
new(0x00000001, 0x00000001)
];
InstEncoding[] imm6VdImm6Imm6Imm6Constraints = new InstEncoding[]
{
InstEncoding[] imm6VdImm6Imm6Imm6Constraints =
[
new(0x00000000, 0x00380000),
new(0x00001000, 0x00001000),
new(0x00080000, 0x003F0000),
new(0x00100000, 0x003F0000),
new(0x00200000, 0x003F0000),
};
new(0x00200000, 0x003F0000)
];
InstEncoding[] sizeVdConstraints2 = new InstEncoding[]
{
InstEncoding[] sizeVdConstraints2 =
[
new(0x000C0000, 0x000C0000),
new(0x00001000, 0x00001000),
};
new(0x00001000, 0x00001000)
];
InstEncoding[] sizeQsizeQvdQvmConstraints = new InstEncoding[]
{
InstEncoding[] sizeQsizeQvdQvmConstraints =
[
new(0x000C0000, 0x000C0000),
new(0x00080000, 0x000C0040),
new(0x00001040, 0x00001040),
new(0x00000041, 0x00000041),
};
new(0x00000041, 0x00000041)
];
List<InstInfoForTable> insts = new()
{
List<InstInfoForTable> insts =
[
new(0x02A00000, 0x0FE00000, condConstraints, InstName.AdcI, T.AdcIA1, IsaVersion.v80, InstFlags.CondRd),
new(0x00A00000, 0x0FE00010, condConstraints, InstName.AdcR, T.AdcRA1, IsaVersion.v80, InstFlags.CondRd),
new(0x00A00010, 0x0FE00090, condConstraints, InstName.AdcRr, T.AdcRrA1, IsaVersion.v80, InstFlags.CondRd),
@@ -1176,7 +1176,7 @@ namespace Ryujinx.Cpu.LightningJit.Arm32
new(0x0320F002, 0x0FFFFFFF, condConstraints, InstName.Wfe, T.WfeA1, IsaVersion.v80, InstFlags.Cond),
new(0x0320F003, 0x0FFFFFFF, condConstraints, InstName.Wfi, T.WfiA1, IsaVersion.v80, InstFlags.Cond),
new(0x0320F001, 0x0FFFFFFF, condConstraints, InstName.Yield, T.YieldA1, IsaVersion.v80, InstFlags.Cond),
};
];
_table = new(insts);
}

View File

@@ -9,48 +9,49 @@ namespace Ryujinx.Cpu.LightningJit.Arm32
static InstTableT16()
{
InstEncoding[] rmRdndnConstraints = new InstEncoding[]
{
InstEncoding[] rmRdndnConstraints =
[
new(0x00680000, 0x00780000),
new(0x00850000, 0x00870000),
};
new(0x00850000, 0x00870000)
];
InstEncoding[] rmConstraints = new InstEncoding[]
{
new(0x00680000, 0x00780000),
};
InstEncoding[] rmConstraints =
[
new(0x00680000, 0x00780000)
];
InstEncoding[] condCondConstraints = new InstEncoding[]
{
InstEncoding[] condCondConstraints =
[
new(0x0E000000, 0x0F000000),
new(0x0F000000, 0x0F000000),
};
new(0x0F000000, 0x0F000000)
];
InstEncoding[] maskConstraints = new InstEncoding[]
{
new(0x00000000, 0x000F0000),
};
InstEncoding[] maskConstraints =
[
new(0x00000000, 0x000F0000)
];
InstEncoding[] opConstraints = new InstEncoding[]
{
new(0x18000000, 0x18000000),
};
InstEncoding[] opConstraints =
[
new(0x18000000, 0x18000000)
];
InstEncoding[] opOpOpOpConstraints = new InstEncoding[]
{
InstEncoding[] opOpOpOpConstraints =
[
new(0x00000000, 0x03C00000),
new(0x00400000, 0x03C00000),
new(0x01400000, 0x03C00000),
new(0x01800000, 0x03C00000),
};
new(0x01800000, 0x03C00000)
];
List<InstInfoForTable> insts = new()
{
List<InstInfoForTable> insts =
[
new(0x41400000, 0xFFC00000, InstName.AdcR, T.AdcRT1, IsaVersion.v80, InstFlags.Rdn),
new(0x1C000000, 0xFE000000, InstName.AddI, T.AddIT1, IsaVersion.v80, InstFlags.Rd),
new(0x30000000, 0xF8000000, InstName.AddI, T.AddIT2, IsaVersion.v80, InstFlags.Rdn),
new(0x18000000, 0xFE000000, InstName.AddR, T.AddRT1, IsaVersion.v80, InstFlags.Rd),
new(0x44000000, 0xFF000000, rmRdndnConstraints, InstName.AddR, T.AddRT2, IsaVersion.v80, InstFlags.RdnDn),
new(0x44000000, 0xFF000000, rmRdndnConstraints, InstName.AddR, T.AddRT2, IsaVersion.v80,
InstFlags.RdnDn),
new(0xA8000000, 0xF8000000, InstName.AddSpI, T.AddSpIT1, IsaVersion.v80, InstFlags.RdRd16),
new(0xB0000000, 0xFF800000, InstName.AddSpI, T.AddSpIT2, IsaVersion.v80, InstFlags.None),
new(0x44680000, 0xFF780000, InstName.AddSpR, T.AddSpRT1, IsaVersion.v80, InstFlags.None),
@@ -86,7 +87,8 @@ namespace Ryujinx.Cpu.LightningJit.Arm32
new(0x20000000, 0xF8000000, InstName.MovI, T.MovIT1, IsaVersion.v80, InstFlags.RdRd16),
new(0x46000000, 0xFF000000, InstName.MovR, T.MovRT1, IsaVersion.v80, InstFlags.Rd),
new(0x00000000, 0xE0000000, opConstraints, InstName.MovR, T.MovRT2, IsaVersion.v80, InstFlags.Rd),
new(0x40000000, 0xFE000000, opOpOpOpConstraints, InstName.MovRr, T.MovRrT1, IsaVersion.v80, InstFlags.None),
new(0x40000000, 0xFE000000, opOpOpOpConstraints, InstName.MovRr, T.MovRrT1, IsaVersion.v80,
InstFlags.None),
new(0x43400000, 0xFFC00000, InstName.Mul, T.MulT1, IsaVersion.v80, InstFlags.None),
new(0x43C00000, 0xFFC00000, InstName.MvnR, T.MvnRT1, IsaVersion.v80, InstFlags.Rd),
new(0xBF000000, 0xFFFF0000, InstName.Nop, T.NopT1, IsaVersion.v80, InstFlags.None),
@@ -99,7 +101,8 @@ namespace Ryujinx.Cpu.LightningJit.Arm32
new(0x42400000, 0xFFC00000, InstName.RsbI, T.RsbIT1, IsaVersion.v80, InstFlags.Rd),
new(0x41800000, 0xFFC00000, InstName.SbcR, T.SbcRT1, IsaVersion.v80, InstFlags.Rdn),
new(0xB6500000, 0xFFF70000, InstName.Setend, T.SetendT1, IsaVersion.v80, InstFlags.None),
new(0xB6100000, 0xFFF70000, InstName.Setpan, T.SetpanT1, IsaVersion.v81, IsaFeature.FeatPan, InstFlags.None),
new(0xB6100000, 0xFFF70000, InstName.Setpan, T.SetpanT1, IsaVersion.v81, IsaFeature.FeatPan,
InstFlags.None),
new(0xBF400000, 0xFFFF0000, InstName.Sev, T.SevT1, IsaVersion.v80, InstFlags.None),
new(0xBF500000, 0xFFFF0000, InstName.Sevl, T.SevlT1, IsaVersion.v80, InstFlags.None),
new(0xC0000000, 0xF8000000, InstName.Stm, T.StmT1, IsaVersion.v80, InstFlags.RlistRead),
@@ -123,8 +126,8 @@ namespace Ryujinx.Cpu.LightningJit.Arm32
new(0xB2800000, 0xFFC00000, InstName.Uxth, T.UxthT1, IsaVersion.v80, InstFlags.Rd),
new(0xBF200000, 0xFFFF0000, InstName.Wfe, T.WfeT1, IsaVersion.v80, InstFlags.None),
new(0xBF300000, 0xFFFF0000, InstName.Wfi, T.WfiT1, IsaVersion.v80, InstFlags.None),
new(0xBF100000, 0xFFFF0000, InstName.Yield, T.YieldT1, IsaVersion.v80, InstFlags.None),
};
new(0xBF100000, 0xFFFF0000, InstName.Yield, T.YieldT1, IsaVersion.v80, InstFlags.None)
];
_table = new(insts);
}

View File

@@ -9,525 +9,525 @@ namespace Ryujinx.Cpu.LightningJit.Arm32
static InstTableT32()
{
InstEncoding[] rnRdsConstraints = new InstEncoding[]
{
InstEncoding[] rnRdsConstraints =
[
new(0x000D0000, 0x000F0000),
new(0x00100F00, 0x00100F00),
};
new(0x00100F00, 0x00100F00)
];
InstEncoding[] rnRnConstraints = new InstEncoding[]
{
InstEncoding[] rnRnConstraints =
[
new(0x000D0000, 0x000F0000),
new(0x000F0000, 0x000F0000),
};
new(0x000F0000, 0x000F0000)
];
InstEncoding[] rdsConstraints = new InstEncoding[]
{
new(0x00100F00, 0x00100F00),
};
InstEncoding[] rdsConstraints =
[
new(0x00100F00, 0x00100F00)
];
InstEncoding[] vdVmConstraints = new InstEncoding[]
{
InstEncoding[] vdVmConstraints =
[
new(0x00001000, 0x00001000),
new(0x00000001, 0x00000001),
};
new(0x00000001, 0x00000001)
];
InstEncoding[] condCondCondConstraints = new InstEncoding[]
{
InstEncoding[] condCondCondConstraints =
[
new(0x03800000, 0x03C00000),
new(0x03C00000, 0x03C00000),
new(0x03800000, 0x03800000),
};
new(0x03800000, 0x03800000)
];
InstEncoding[] rnConstraints = new InstEncoding[]
{
new(0x000F0000, 0x000F0000),
};
InstEncoding[] rnConstraints =
[
new(0x000F0000, 0x000F0000)
];
InstEncoding[] hConstraints = new InstEncoding[]
{
new(0x00000001, 0x00000001),
};
InstEncoding[] hConstraints =
[
new(0x00000001, 0x00000001)
];
InstEncoding[] imodmConstraints = new InstEncoding[]
{
new(0x00000000, 0x00000700),
};
InstEncoding[] imodmConstraints =
[
new(0x00000000, 0x00000700)
];
InstEncoding[] optionConstraints = new InstEncoding[]
{
new(0x00000000, 0x0000000F),
};
InstEncoding[] optionConstraints =
[
new(0x00000000, 0x0000000F)
];
InstEncoding[] puwPwPuwPuwConstraints = new InstEncoding[]
{
InstEncoding[] puwPwPuwPuwConstraints =
[
new(0x00000000, 0x01A00000),
new(0x01000000, 0x01200000),
new(0x00200000, 0x01A00000),
new(0x01A00000, 0x01A00000),
};
new(0x01A00000, 0x01A00000)
];
InstEncoding[] rnPuwConstraints = new InstEncoding[]
{
InstEncoding[] rnPuwConstraints =
[
new(0x000F0000, 0x000F0000),
new(0x00000000, 0x01A00000),
};
new(0x00000000, 0x01A00000)
];
InstEncoding[] puwConstraints = new InstEncoding[]
{
new(0x00000000, 0x01A00000),
};
InstEncoding[] puwConstraints =
[
new(0x00000000, 0x01A00000)
];
InstEncoding[] rnRtConstraints = new InstEncoding[]
{
InstEncoding[] rnRtConstraints =
[
new(0x000F0000, 0x000F0000),
new(0x0000F000, 0x0000F000),
};
new(0x0000F000, 0x0000F000)
];
InstEncoding[] rnRtpuwPuwPwConstraints = new InstEncoding[]
{
InstEncoding[] rnRtpuwPuwPwConstraints =
[
new(0x000F0000, 0x000F0000),
new(0x0000F400, 0x0000F700),
new(0x00000600, 0x00000700),
new(0x00000000, 0x00000500),
};
new(0x00000000, 0x00000500)
];
InstEncoding[] rtConstraints = new InstEncoding[]
{
new(0x0000F000, 0x0000F000),
};
InstEncoding[] rtConstraints =
[
new(0x0000F000, 0x0000F000)
];
InstEncoding[] rnPwConstraints = new InstEncoding[]
{
InstEncoding[] rnPwConstraints =
[
new(0x000F0000, 0x000F0000),
new(0x00000000, 0x01200000),
};
new(0x00000000, 0x01200000)
];
InstEncoding[] pwConstraints = new InstEncoding[]
{
new(0x00000000, 0x01200000),
};
InstEncoding[] pwConstraints =
[
new(0x00000000, 0x01200000)
];
InstEncoding[] rnPuwPwConstraints = new InstEncoding[]
{
InstEncoding[] rnPuwPwConstraints =
[
new(0x000F0000, 0x000F0000),
new(0x00000600, 0x00000700),
new(0x00000000, 0x00000500),
};
new(0x00000000, 0x00000500)
];
InstEncoding[] raConstraints = new InstEncoding[]
{
new(0x0000F000, 0x0000F000),
};
InstEncoding[] raConstraints =
[
new(0x0000F000, 0x0000F000)
];
InstEncoding[] sTConstraints = new InstEncoding[]
{
InstEncoding[] sTConstraints =
[
new(0x00100000, 0x00100000),
new(0x00000010, 0x00000010),
};
new(0x00000010, 0x00000010)
];
InstEncoding[] vdVnVmConstraints = new InstEncoding[]
{
InstEncoding[] vdVnVmConstraints =
[
new(0x00001000, 0x00001000),
new(0x00010000, 0x00010000),
new(0x00000001, 0x00000001),
};
new(0x00000001, 0x00000001)
];
InstEncoding[] shimm2imm3Constraints = new InstEncoding[]
{
new(0x00200000, 0x002070C0),
};
InstEncoding[] shimm2imm3Constraints =
[
new(0x00200000, 0x002070C0)
];
InstEncoding[] rnimm8Constraints = new InstEncoding[]
{
new(0x000E0000, 0x000F00FF),
};
InstEncoding[] rnimm8Constraints =
[
new(0x000E0000, 0x000F00FF)
];
InstEncoding[] sizeQvdQvnQvmConstraints = new InstEncoding[]
{
InstEncoding[] sizeQvdQvnQvmConstraints =
[
new(0x00300000, 0x00300000),
new(0x00001040, 0x00001040),
new(0x00010040, 0x00010040),
new(0x00000041, 0x00000041),
};
new(0x00000041, 0x00000041)
];
InstEncoding[] sizeVdConstraints = new InstEncoding[]
{
InstEncoding[] sizeVdConstraints =
[
new(0x00300000, 0x00300000),
new(0x00001000, 0x00001000),
};
new(0x00001000, 0x00001000)
];
InstEncoding[] qvdQvnQvmConstraints = new InstEncoding[]
{
InstEncoding[] qvdQvnQvmConstraints =
[
new(0x00001040, 0x00001040),
new(0x00010040, 0x00010040),
new(0x00000041, 0x00000041),
};
new(0x00000041, 0x00000041)
];
InstEncoding[] sizeQvdQvmConstraints = new InstEncoding[]
{
InstEncoding[] sizeQvdQvmConstraints =
[
new(0x000C0000, 0x000C0000),
new(0x00001040, 0x00001040),
new(0x00000041, 0x00000041),
};
new(0x00000041, 0x00000041)
];
InstEncoding[] sizeVnVmConstraints = new InstEncoding[]
{
InstEncoding[] sizeVnVmConstraints =
[
new(0x00300000, 0x00300000),
new(0x00010000, 0x00010000),
new(0x00000001, 0x00000001),
};
new(0x00000001, 0x00000001)
];
InstEncoding[] sizeVdOpvnConstraints = new InstEncoding[]
{
InstEncoding[] sizeVdOpvnConstraints =
[
new(0x00300000, 0x00300000),
new(0x00001000, 0x00001000),
new(0x00010100, 0x00010100),
};
new(0x00010100, 0x00010100)
];
InstEncoding[] cmodeCmodeQvdConstraints = new InstEncoding[]
{
InstEncoding[] cmodeCmodeQvdConstraints =
[
new(0x00000000, 0x00000100),
new(0x00000C00, 0x00000C00),
new(0x00001040, 0x00001040),
};
new(0x00001040, 0x00001040)
];
InstEncoding[] qvdQvnQvmOpConstraints = new InstEncoding[]
{
InstEncoding[] qvdQvnQvmOpConstraints =
[
new(0x00001040, 0x00001040),
new(0x00010040, 0x00010040),
new(0x00000041, 0x00000041),
new(0x00000000, 0x00300000),
};
new(0x00000000, 0x00300000)
];
InstEncoding[] qvdQvnQvmSizeConstraints = new InstEncoding[]
{
InstEncoding[] qvdQvnQvmSizeConstraints =
[
new(0x00001040, 0x00001040),
new(0x00010040, 0x00010040),
new(0x00000041, 0x00000041),
new(0x00300000, 0x00300000),
};
new(0x00300000, 0x00300000)
];
InstEncoding[] qvdQvnConstraints = new InstEncoding[]
{
InstEncoding[] qvdQvnConstraints =
[
new(0x00001040, 0x00001040),
new(0x00010040, 0x00010040),
};
new(0x00010040, 0x00010040)
];
InstEncoding[] qvdQvmConstraints = new InstEncoding[]
{
InstEncoding[] qvdQvmConstraints =
[
new(0x00001040, 0x00001040),
new(0x00000041, 0x00000041),
};
new(0x00000041, 0x00000041)
];
InstEncoding[] sizeConstraints = new InstEncoding[]
{
new(0x00000000, 0x00000300),
};
InstEncoding[] sizeConstraints =
[
new(0x00000000, 0x00000300)
];
InstEncoding[] vmConstraints = new InstEncoding[]
{
new(0x00000001, 0x00000001),
};
InstEncoding[] vmConstraints =
[
new(0x00000001, 0x00000001)
];
InstEncoding[] opvdOpvmConstraints = new InstEncoding[]
{
InstEncoding[] opvdOpvmConstraints =
[
new(0x00001100, 0x00001100),
new(0x00000001, 0x00000101),
};
new(0x00000001, 0x00000101)
];
InstEncoding[] imm6Opimm6Imm6QvdQvmConstraints = new InstEncoding[]
{
InstEncoding[] imm6Opimm6Imm6QvdQvmConstraints =
[
new(0x00000000, 0x00380000),
new(0x00200000, 0x00300200),
new(0x00000000, 0x00200000),
new(0x00001040, 0x00001040),
new(0x00000041, 0x00000041),
};
new(0x00000041, 0x00000041)
];
InstEncoding[] qvdEbConstraints = new InstEncoding[]
{
InstEncoding[] qvdEbConstraints =
[
new(0x00210000, 0x00210000),
new(0x00400020, 0x00400020),
};
new(0x00400020, 0x00400020)
];
InstEncoding[] imm4QvdConstraints = new InstEncoding[]
{
InstEncoding[] imm4QvdConstraints =
[
new(0x00000000, 0x00070000),
new(0x00001040, 0x00001040),
};
new(0x00001040, 0x00001040)
];
InstEncoding[] qvdQvnQvmQimm4Constraints = new InstEncoding[]
{
InstEncoding[] qvdQvnQvmQimm4Constraints =
[
new(0x00001040, 0x00001040),
new(0x00010040, 0x00010040),
new(0x00000041, 0x00000041),
new(0x00000800, 0x00000840),
};
new(0x00000800, 0x00000840)
];
InstEncoding[] qvdConstraints = new InstEncoding[]
{
new(0x00001040, 0x00001040),
};
InstEncoding[] qvdConstraints =
[
new(0x00001040, 0x00001040)
];
InstEncoding[] vdVnConstraints = new InstEncoding[]
{
InstEncoding[] vdVnConstraints =
[
new(0x00001000, 0x00001000),
new(0x00010000, 0x00010000),
};
new(0x00010000, 0x00010000)
];
InstEncoding[] sizeConstraints2 = new InstEncoding[]
{
new(0x00000C00, 0x00000C00),
};
InstEncoding[] sizeConstraints2 =
[
new(0x00000C00, 0x00000C00)
];
InstEncoding[] sizeIndexAlignIndexAlignConstraints = new InstEncoding[]
{
InstEncoding[] sizeIndexAlignIndexAlignConstraints =
[
new(0x00000C00, 0x00000C00),
new(0x00000010, 0x00000030),
new(0x00000020, 0x00000030),
};
new(0x00000020, 0x00000030)
];
InstEncoding[] sizeSizeaConstraints = new InstEncoding[]
{
InstEncoding[] sizeSizeaConstraints =
[
new(0x000000C0, 0x000000C0),
new(0x00000010, 0x000000D0),
};
new(0x00000010, 0x000000D0)
];
InstEncoding[] alignConstraints = new InstEncoding[]
{
new(0x00000020, 0x00000020),
};
InstEncoding[] alignConstraints =
[
new(0x00000020, 0x00000020)
];
InstEncoding[] alignConstraints2 = new InstEncoding[]
{
InstEncoding[] alignConstraints2 =
[
new(0x00000030, 0x00000030)
];
InstEncoding[] sizeConstraints3 =
[
new(0x000000C0, 0x000000C0)
];
InstEncoding[] alignSizeConstraints =
[
new(0x00000030, 0x00000030),
};
new(0x000000C0, 0x000000C0)
];
InstEncoding[] sizeConstraints3 = new InstEncoding[]
{
InstEncoding[] sizeAConstraints =
[
new(0x000000C0, 0x000000C0),
};
new(0x00000010, 0x00000010)
];
InstEncoding[] alignSizeConstraints = new InstEncoding[]
{
new(0x00000030, 0x00000030),
InstEncoding[] sizeAlignConstraints =
[
new(0x000000C0, 0x000000C0),
};
new(0x00000020, 0x00000020)
];
InstEncoding[] sizeAConstraints = new InstEncoding[]
{
new(0x000000C0, 0x000000C0),
new(0x00000010, 0x00000010),
};
InstEncoding[] sizeAlignConstraints = new InstEncoding[]
{
new(0x000000C0, 0x000000C0),
new(0x00000020, 0x00000020),
};
InstEncoding[] sizeIndexAlignConstraints = new InstEncoding[]
{
InstEncoding[] sizeIndexAlignConstraints =
[
new(0x00000C00, 0x00000C00),
new(0x00000030, 0x00000030),
};
new(0x00000030, 0x00000030)
];
InstEncoding[] sizeaConstraints = new InstEncoding[]
{
new(0x000000C0, 0x000000D0),
};
InstEncoding[] sizeaConstraints =
[
new(0x000000C0, 0x000000D0)
];
InstEncoding[] sizeSizeVdConstraints = new InstEncoding[]
{
InstEncoding[] sizeSizeVdConstraints =
[
new(0x00300000, 0x00300000),
new(0x00000000, 0x00300000),
new(0x00001000, 0x00001000),
};
new(0x00001000, 0x00001000)
];
InstEncoding[] sizeQvdQvnConstraints = new InstEncoding[]
{
InstEncoding[] sizeQvdQvnConstraints =
[
new(0x00300000, 0x00300000),
new(0x10001000, 0x10001000),
new(0x10010000, 0x10010000),
};
new(0x10010000, 0x10010000)
];
InstEncoding[] imm3hImm3hImm3hImm3hImm3hVdConstraints = new InstEncoding[]
{
InstEncoding[] imm3hImm3hImm3hImm3hImm3hVdConstraints =
[
new(0x00000000, 0x00380000),
new(0x00180000, 0x00380000),
new(0x00280000, 0x00380000),
new(0x00300000, 0x00380000),
new(0x00380000, 0x00380000),
new(0x00001000, 0x00001000),
};
new(0x00001000, 0x00001000)
];
InstEncoding[] sizeVmConstraints = new InstEncoding[]
{
InstEncoding[] sizeVmConstraints =
[
new(0x000C0000, 0x000C0000),
new(0x00000001, 0x00000001),
};
new(0x00000001, 0x00000001)
];
InstEncoding[] opc1opc2Constraints = new InstEncoding[]
{
new(0x00000040, 0x00400060),
};
InstEncoding[] opc1opc2Constraints =
[
new(0x00000040, 0x00400060)
];
InstEncoding[] uopc1opc2Uopc1opc2Constraints = new InstEncoding[]
{
InstEncoding[] uopc1opc2Uopc1opc2Constraints =
[
new(0x00800000, 0x00C00060),
new(0x00000040, 0x00400060),
};
new(0x00000040, 0x00400060)
];
InstEncoding[] sizeOpuOpsizeVdConstraints = new InstEncoding[]
{
InstEncoding[] sizeOpuOpsizeVdConstraints =
[
new(0x00300000, 0x00300000),
new(0x10000200, 0x10000200),
new(0x00100200, 0x00300200),
new(0x00001000, 0x00001000),
};
new(0x00001000, 0x00001000)
];
InstEncoding[] sizeOpsizeOpsizeQvdQvnQvmConstraints = new InstEncoding[]
{
InstEncoding[] sizeOpsizeOpsizeQvdQvnQvmConstraints =
[
new(0x00300000, 0x00300000),
new(0x10100000, 0x10300000),
new(0x10200000, 0x10300000),
new(0x00001040, 0x00001040),
new(0x00010040, 0x00010040),
new(0x00000041, 0x00000041),
};
new(0x00000041, 0x00000041)
];
InstEncoding[] cmodeQvdConstraints = new InstEncoding[]
{
InstEncoding[] cmodeQvdConstraints =
[
new(0x00000E00, 0x00000E00),
new(0x00001040, 0x00001040),
};
new(0x00001040, 0x00001040)
];
InstEncoding[] qConstraints = new InstEncoding[]
{
new(0x00000040, 0x00000040),
};
InstEncoding[] qConstraints =
[
new(0x00000040, 0x00000040)
];
InstEncoding[] sizeQConstraints = new InstEncoding[]
{
InstEncoding[] sizeQConstraints =
[
new(0x00300000, 0x00300000),
new(0x00000040, 0x00000040),
};
new(0x00000040, 0x00000040)
];
InstEncoding[] sizeConstraints4 = new InstEncoding[]
{
new(0x00300000, 0x00300000),
};
InstEncoding[] sizeConstraints4 =
[
new(0x00300000, 0x00300000)
];
InstEncoding[] qvdQvnQvmSizeSizeConstraints = new InstEncoding[]
{
InstEncoding[] qvdQvnQvmSizeSizeConstraints =
[
new(0x00001040, 0x00001040),
new(0x00010040, 0x00010040),
new(0x00000041, 0x00000041),
new(0x00000000, 0x00300000),
new(0x00300000, 0x00300000),
};
new(0x00300000, 0x00300000)
];
InstEncoding[] sizeSizeQvdQvnConstraints = new InstEncoding[]
{
InstEncoding[] sizeSizeQvdQvnConstraints =
[
new(0x00300000, 0x00300000),
new(0x00000000, 0x00300000),
new(0x10001000, 0x10001000),
new(0x10010000, 0x10010000),
};
new(0x10010000, 0x10010000)
];
InstEncoding[] opSizeVmConstraints = new InstEncoding[]
{
InstEncoding[] opSizeVmConstraints =
[
new(0x00000000, 0x000000C0),
new(0x000C0000, 0x000C0000),
new(0x00000001, 0x00000001),
};
new(0x00000001, 0x00000001)
];
InstEncoding[] qvdQvmQvnConstraints = new InstEncoding[]
{
InstEncoding[] qvdQvmQvnConstraints =
[
new(0x00001040, 0x00001040),
new(0x00000041, 0x00000041),
new(0x00010040, 0x00010040),
};
new(0x00010040, 0x00010040)
];
InstEncoding[] imm6UopVmConstraints = new InstEncoding[]
{
InstEncoding[] imm6UopVmConstraints =
[
new(0x00000000, 0x00380000),
new(0x00000000, 0x10000100),
new(0x00000001, 0x00000001),
};
new(0x00000001, 0x00000001)
];
InstEncoding[] imm6lUopQvdQvmConstraints = new InstEncoding[]
{
InstEncoding[] imm6lUopQvdQvmConstraints =
[
new(0x00000000, 0x00380080),
new(0x00000000, 0x10000100),
new(0x00001040, 0x00001040),
new(0x00000041, 0x00000041),
};
new(0x00000041, 0x00000041)
];
InstEncoding[] qvdQvmSizeSizeConstraints = new InstEncoding[]
{
InstEncoding[] qvdQvmSizeSizeConstraints =
[
new(0x00001040, 0x00001040),
new(0x00000041, 0x00000041),
new(0x00000000, 0x000C0000),
new(0x000C0000, 0x000C0000),
};
new(0x000C0000, 0x000C0000)
];
InstEncoding[] sizeSizeSizeQvdQvmConstraints = new InstEncoding[]
{
InstEncoding[] sizeSizeSizeQvdQvmConstraints =
[
new(0x00040000, 0x000C0000),
new(0x00080000, 0x000C0000),
new(0x000C0000, 0x000C0000),
new(0x00001040, 0x00001040),
new(0x00000041, 0x00000041),
};
new(0x00000041, 0x00000041)
];
InstEncoding[] sizeSizeQvdQvmConstraints = new InstEncoding[]
{
InstEncoding[] sizeSizeQvdQvmConstraints =
[
new(0x00080000, 0x000C0000),
new(0x000C0000, 0x000C0000),
new(0x00001040, 0x00001040),
new(0x00000041, 0x00000041),
};
new(0x00000041, 0x00000041)
];
InstEncoding[] imm6lQvdQvmConstraints = new InstEncoding[]
{
InstEncoding[] imm6lQvdQvmConstraints =
[
new(0x00000000, 0x00380080),
new(0x00001040, 0x00001040),
new(0x00000041, 0x00000041),
};
new(0x00000041, 0x00000041)
];
InstEncoding[] imm6VmConstraints = new InstEncoding[]
{
InstEncoding[] imm6VmConstraints =
[
new(0x00000000, 0x00380000),
new(0x00000001, 0x00000001),
};
new(0x00000001, 0x00000001)
];
InstEncoding[] imm6VdImm6Imm6Imm6Constraints = new InstEncoding[]
{
InstEncoding[] imm6VdImm6Imm6Imm6Constraints =
[
new(0x00000000, 0x00380000),
new(0x00001000, 0x00001000),
new(0x00080000, 0x003F0000),
new(0x00100000, 0x003F0000),
new(0x00200000, 0x003F0000),
};
new(0x00200000, 0x003F0000)
];
InstEncoding[] sizeVdConstraints2 = new InstEncoding[]
{
InstEncoding[] sizeVdConstraints2 =
[
new(0x000C0000, 0x000C0000),
new(0x00001000, 0x00001000),
};
new(0x00001000, 0x00001000)
];
InstEncoding[] sizeQsizeQvdQvmConstraints = new InstEncoding[]
{
InstEncoding[] sizeQsizeQvdQvmConstraints =
[
new(0x000C0000, 0x000C0000),
new(0x00080000, 0x000C0040),
new(0x00001040, 0x00001040),
new(0x00000041, 0x00000041),
};
new(0x00000041, 0x00000041)
];
List<InstInfoForTable> insts = new()
{
List<InstInfoForTable> insts =
[
new(0xF1400000, 0xFBE08000, InstName.AdcI, T.AdcIT1, IsaVersion.v80, InstFlags.Rd),
new(0xEB400000, 0xFFE08000, InstName.AdcR, T.AdcRT2, IsaVersion.v80, InstFlags.Rd),
new(0xF1000000, 0xFBE08000, rnRdsConstraints, InstName.AddI, T.AddIT3, IsaVersion.v80, InstFlags.Rd),
@@ -1190,7 +1190,7 @@ namespace Ryujinx.Cpu.LightningJit.Arm32
new(0xF3AF8002, 0xFFFFFFFF, InstName.Wfe, T.WfeT2, IsaVersion.v80, InstFlags.None),
new(0xF3AF8003, 0xFFFFFFFF, InstName.Wfi, T.WfiT2, IsaVersion.v80, InstFlags.None),
new(0xF3AF8001, 0xFFFFFFFF, InstName.Yield, T.YieldT2, IsaVersion.v80, InstFlags.None),
};
];
_table = new(insts);
}

View File

@@ -25,8 +25,8 @@ namespace Ryujinx.Cpu.LightningJit.Arm64
{
Debug.Assert((int)((endAddress - address) / 4) == instructions.Count);
_predecessors = new();
_successors = new();
_predecessors = [];
_successors = [];
Address = address;
EndAddress = endAddress;
Instructions = instructions;

View File

@@ -36,8 +36,8 @@ namespace Ryujinx.Cpu.LightningJit.Arm64
{
Console.WriteLine($"bb {block.Index}");
List<int> predList = new();
List<int> succList = new();
List<int> predList = [];
List<int> succList = [];
for (int index = 0; index < block.PredecessorsCount; index++)
{

View File

@@ -309,7 +309,7 @@ namespace Ryujinx.Cpu.LightningJit.Arm64.Target.Arm64
MultiBlock multiBlock = Decoder.DecodeMulti(cpuPreset, memoryManager, address);
Dictionary<ulong, int> targets = new();
List<PendingBranch> pendingBranches = new();
List<PendingBranch> pendingBranches = [];
uint gprUseMask = multiBlock.GlobalUseMask.GprMask;
uint fpSimdUseMask = multiBlock.GlobalUseMask.FpSimdMask;

View File

@@ -15,8 +15,8 @@ namespace Ryujinx.Cpu.LightningJit.Arm64.Target.Arm64
public static MultiBlock DecodeMulti(CpuPreset cpuPreset, IMemoryManager memoryManager, ulong address)
{
List<Block> blocks = new();
List<ulong> branchTargets = new();
List<Block> blocks = [];
List<ulong> branchTargets = [];
RegisterMask useMask = RegisterMask.Zero;
@@ -238,7 +238,7 @@ namespace Ryujinx.Cpu.LightningJit.Arm64.Target.Arm64
{
ulong startAddress = address;
List<InstInfo> insts = new();
List<InstInfo> insts = [];
uint gprUseMask = useMask.GprMask;
uint fpSimdUseMask = useMask.FpSimdMask;

View File

@@ -94,37 +94,37 @@ namespace Ryujinx.Cpu.LightningJit.Arm64.Target.Arm64
static InstTable()
{
InstEncoding[] qsizeConstraints = new InstEncoding[]
{
new(0x00C00000, 0x40C00000),
};
InstEncoding[] qsizeConstraints =
[
new(0x00C00000, 0x40C00000)
];
InstEncoding[] sizeConstraints = new InstEncoding[]
{
new(0x00C00000, 0x00C00000),
};
InstEncoding[] sizeConstraints =
[
new(0x00C00000, 0x00C00000)
];
InstEncoding[] opuOpuOpuConstraints = new InstEncoding[]
{
InstEncoding[] opuOpuOpuConstraints =
[
new(0x00001400, 0x00001C00),
new(0x00001800, 0x00001C00),
new(0x00001C00, 0x00001C00),
};
new(0x00001C00, 0x00001C00)
];
InstEncoding[] shiftSfimm6Constraints = new InstEncoding[]
{
InstEncoding[] shiftSfimm6Constraints =
[
new(0x00C00000, 0x00C00000),
new(0x00008000, 0x80008000),
};
new(0x00008000, 0x80008000)
];
InstEncoding[] qsizeSizeConstraints = new InstEncoding[]
{
InstEncoding[] qsizeSizeConstraints =
[
new(0x00800000, 0x40C00000),
new(0x00C00000, 0x00C00000),
};
new(0x00C00000, 0x00C00000)
];
InstEncoding[] nimmsNimmsNimmsNimmsNimmsNimmsNimmsNimmsSfnConstraints = new InstEncoding[]
{
InstEncoding[] nimmsNimmsNimmsNimmsNimmsNimmsNimmsNimmsSfnConstraints =
[
new(0x0040FC00, 0x0040FC00),
new(0x00007C00, 0x0040FC00),
new(0x0000BC00, 0x0040FC00),
@@ -133,326 +133,326 @@ namespace Ryujinx.Cpu.LightningJit.Arm64.Target.Arm64
new(0x0000F400, 0x0040FC00),
new(0x0000F800, 0x0040FC00),
new(0x0000FC00, 0x0040FC00),
new(0x00400000, 0x80400000),
};
new(0x00400000, 0x80400000)
];
InstEncoding[] sfimm6Constraints = new InstEncoding[]
{
new(0x00008000, 0x80008000),
};
InstEncoding[] sfimm6Constraints =
[
new(0x00008000, 0x80008000)
];
InstEncoding[] sfnSfnSfimmr5Sfimms5Constraints = new InstEncoding[]
{
InstEncoding[] sfnSfnSfimmr5Sfimms5Constraints =
[
new(0x80000000, 0x80400000),
new(0x00400000, 0x80400000),
new(0x00200000, 0x80200000),
new(0x00008000, 0x80008000),
};
new(0x00008000, 0x80008000)
];
InstEncoding[] cmodeopqConstraints = new InstEncoding[]
{
new(0x2000F000, 0x6000F000),
};
InstEncoding[] cmodeopqConstraints =
[
new(0x2000F000, 0x6000F000)
];
InstEncoding[] rsRtConstraints = new InstEncoding[]
{
InstEncoding[] rsRtConstraints =
[
new(0x00010000, 0x00010000),
new(0x00000001, 0x00000001),
};
new(0x00000001, 0x00000001)
];
InstEncoding[] sfszSfszSfszSfszConstraints = new InstEncoding[]
{
InstEncoding[] sfszSfszSfszSfszConstraints =
[
new(0x80000000, 0x80000C00),
new(0x80000400, 0x80000C00),
new(0x80000800, 0x80000C00),
new(0x00000C00, 0x80000C00),
};
new(0x00000C00, 0x80000C00)
];
InstEncoding[] imm5Constraints = new InstEncoding[]
{
InstEncoding[] imm5Constraints =
[
new(0x00000000, 0x000F0000)
];
InstEncoding[] imm5Imm5qConstraints =
[
new(0x00000000, 0x000F0000),
};
new(0x00080000, 0x400F0000)
];
InstEncoding[] imm5Imm5qConstraints = new InstEncoding[]
{
new(0x00000000, 0x000F0000),
new(0x00080000, 0x400F0000),
};
InstEncoding[] nsfNsfSfimmsConstraints = new InstEncoding[]
{
InstEncoding[] nsfNsfSfimmsConstraints =
[
new(0x00400000, 0x80400000),
new(0x80000000, 0x80400000),
new(0x00008000, 0x80008000),
};
new(0x00008000, 0x80008000)
];
InstEncoding[] qimm4Constraints = new InstEncoding[]
{
new(0x00004000, 0x40004000),
};
InstEncoding[] qimm4Constraints =
[
new(0x00004000, 0x40004000)
];
InstEncoding[] qszConstraints = new InstEncoding[]
{
new(0x00400000, 0x40400000),
};
InstEncoding[] qszConstraints =
[
new(0x00400000, 0x40400000)
];
InstEncoding[] euacEuacEuacConstraints = new InstEncoding[]
{
InstEncoding[] euacEuacEuacConstraints =
[
new(0x00000800, 0x20800800),
new(0x00800000, 0x20800800),
new(0x00800800, 0x20800800),
};
new(0x00800800, 0x20800800)
];
InstEncoding[] qszEuacEuacEuacConstraints = new InstEncoding[]
{
InstEncoding[] qszEuacEuacEuacConstraints =
[
new(0x00400000, 0x40400000),
new(0x00000800, 0x20800800),
new(0x00800000, 0x20800800),
new(0x00800800, 0x20800800),
};
new(0x00800800, 0x20800800)
];
InstEncoding[] szConstraints = new InstEncoding[]
{
new(0x00400000, 0x00400000),
};
InstEncoding[] szConstraints =
[
new(0x00400000, 0x00400000)
];
InstEncoding[] sizeQsizeConstraints = new InstEncoding[]
{
InstEncoding[] sizeQsizeConstraints =
[
new(0x00000000, 0x00C00000),
new(0x00C00000, 0x40C00000),
};
new(0x00C00000, 0x40C00000)
];
InstEncoding[] sizeSizeSizelSizeqSizehqConstraints = new InstEncoding[]
{
InstEncoding[] sizeSizeSizelSizeqSizehqConstraints =
[
new(0x00000000, 0x00C00000),
new(0x00C00000, 0x00C00000),
new(0x00A00000, 0x00E00000),
new(0x00800000, 0x40C00000),
new(0x00400800, 0x40C00800),
};
new(0x00400800, 0x40C00800)
];
InstEncoding[] szConstraints2 = new InstEncoding[]
{
new(0x00000000, 0x00400000),
};
InstEncoding[] szConstraints2 =
[
new(0x00000000, 0x00400000)
];
InstEncoding[] immhConstraints = new InstEncoding[]
{
InstEncoding[] immhConstraints =
[
new(0x00000000, 0x00780000)
];
InstEncoding[] immhQimmhConstraints =
[
new(0x00000000, 0x00780000),
};
new(0x00400000, 0x40400000)
];
InstEncoding[] immhQimmhConstraints = new InstEncoding[]
{
new(0x00000000, 0x00780000),
new(0x00400000, 0x40400000),
};
InstEncoding[] sfscaleConstraints =
[
new(0x00000000, 0x80008000)
];
InstEncoding[] sfscaleConstraints = new InstEncoding[]
{
new(0x00000000, 0x80008000),
};
InstEncoding[] ftypeopcFtypeopcFtypeopcFtypeopcFtypeOpcConstraints = new InstEncoding[]
{
InstEncoding[] ftypeopcFtypeopcFtypeopcFtypeopcFtypeOpcConstraints =
[
new(0x00000000, 0x00C18000),
new(0x00408000, 0x00C18000),
new(0x00810000, 0x00C18000),
new(0x00C18000, 0x00C18000),
new(0x00800000, 0x00C00000),
new(0x00010000, 0x00018000),
};
new(0x00010000, 0x00018000)
];
InstEncoding[] szlConstraints = new InstEncoding[]
{
InstEncoding[] szlConstraints =
[
new(0x00600000, 0x00600000)
];
InstEncoding[] szlQszConstraints =
[
new(0x00600000, 0x00600000),
};
new(0x00400000, 0x40400000)
];
InstEncoding[] szlQszConstraints = new InstEncoding[]
{
new(0x00600000, 0x00600000),
new(0x00400000, 0x40400000),
};
InstEncoding[] qConstraints =
[
new(0x00000000, 0x40000000)
];
InstEncoding[] qConstraints = new InstEncoding[]
{
new(0x00000000, 0x40000000),
};
InstEncoding[] sfftypermodeSfftypermodeConstraints = new InstEncoding[]
{
InstEncoding[] sfftypermodeSfftypermodeConstraints =
[
new(0x00400000, 0x80C80000),
new(0x80000000, 0x80C80000),
};
new(0x80000000, 0x80C80000)
];
InstEncoding[] uo1o2Constraints = new InstEncoding[]
{
new(0x20800000, 0x20801000),
};
InstEncoding[] uo1o2Constraints =
[
new(0x20800000, 0x20801000)
];
InstEncoding[] qszUo1o2Constraints = new InstEncoding[]
{
InstEncoding[] qszUo1o2Constraints =
[
new(0x00400000, 0x40400000),
new(0x20800000, 0x20801000),
};
new(0x20800000, 0x20801000)
];
InstEncoding[] sConstraints = new InstEncoding[]
{
new(0x00001000, 0x00001000),
};
InstEncoding[] sConstraints =
[
new(0x00001000, 0x00001000)
];
InstEncoding[] opcodesizeOpcodesizeOpcodesizesOpcodesizeConstraints = new InstEncoding[]
{
InstEncoding[] opcodesizeOpcodesizeOpcodesizesOpcodesizeConstraints =
[
new(0x00004400, 0x0000C400),
new(0x00008800, 0x0000C800),
new(0x00009400, 0x0000D400),
new(0x0000C000, 0x0000C000),
};
new(0x0000C000, 0x0000C000)
];
InstEncoding[] qsizeConstraints2 = new InstEncoding[]
{
new(0x00000C00, 0x40000C00),
};
InstEncoding[] qsizeConstraints2 =
[
new(0x00000C00, 0x40000C00)
];
InstEncoding[] rtRtConstraints = new InstEncoding[]
{
InstEncoding[] rtRtConstraints =
[
new(0x00000018, 0x00000018),
new(0x00000001, 0x00000001),
};
new(0x00000001, 0x00000001)
];
InstEncoding[] opc1sizeOpc1sizeOpc1sizeConstraints = new InstEncoding[]
{
InstEncoding[] opc1sizeOpc1sizeOpc1sizeConstraints =
[
new(0x40800000, 0xC0800000),
new(0x80800000, 0xC0800000),
new(0xC0800000, 0xC0800000),
};
new(0xC0800000, 0xC0800000)
];
InstEncoding[] rtRt2Constraints = new InstEncoding[]
{
InstEncoding[] rtRt2Constraints =
[
new(0x0000001F, 0x0000001F),
new(0x001F0000, 0x001F0000),
};
new(0x001F0000, 0x001F0000)
];
InstEncoding[] opcConstraints = new InstEncoding[]
{
new(0xC0000000, 0xC0000000),
};
InstEncoding[] opcConstraints =
[
new(0xC0000000, 0xC0000000)
];
InstEncoding[] opcConstraints2 = new InstEncoding[]
{
new(0x40000000, 0x40000000),
};
InstEncoding[] opcConstraints2 =
[
new(0x40000000, 0x40000000)
];
InstEncoding[] opclOpcConstraints = new InstEncoding[]
{
InstEncoding[] opclOpcConstraints =
[
new(0x40000000, 0x40400000),
new(0xC0000000, 0xC0000000),
};
new(0xC0000000, 0xC0000000)
];
InstEncoding[] optionConstraints = new InstEncoding[]
{
new(0x00000000, 0x00004000),
};
InstEncoding[] optionConstraints =
[
new(0x00000000, 0x00004000)
];
InstEncoding[] opc1sizeOpc1sizeOpc1sizeOptionConstraints = new InstEncoding[]
{
InstEncoding[] opc1sizeOpc1sizeOpc1sizeOptionConstraints =
[
new(0x40800000, 0xC0800000),
new(0x80800000, 0xC0800000),
new(0xC0800000, 0xC0800000),
new(0x00000000, 0x00004000),
};
new(0x00000000, 0x00004000)
];
InstEncoding[] sizeSizeConstraints = new InstEncoding[]
{
InstEncoding[] sizeSizeConstraints =
[
new(0x00000000, 0x00C00000),
new(0x00C00000, 0x00C00000),
};
new(0x00C00000, 0x00C00000)
];
InstEncoding[] sfhwConstraints = new InstEncoding[]
{
new(0x00400000, 0x80400000),
};
InstEncoding[] sfhwConstraints =
[
new(0x00400000, 0x80400000)
];
InstEncoding[] rtConstraints = new InstEncoding[]
{
new(0x00000001, 0x00000001),
};
InstEncoding[] rtConstraints =
[
new(0x00000001, 0x00000001)
];
InstEncoding[] usizeUsizeUsizeSizeConstraints = new InstEncoding[]
{
InstEncoding[] usizeUsizeUsizeSizeConstraints =
[
new(0x20400000, 0x20C00000),
new(0x20800000, 0x20C00000),
new(0x20C00000, 0x20C00000),
new(0x00C00000, 0x00C00000),
};
new(0x00C00000, 0x00C00000)
];
InstEncoding[] sizeSizeConstraints2 = new InstEncoding[]
{
InstEncoding[] sizeSizeConstraints2 =
[
new(0x00400000, 0x00C00000),
new(0x00800000, 0x00C00000)
];
InstEncoding[] rtConstraints2 =
[
new(0x00000018, 0x00000018)
];
InstEncoding[] sfopcConstraints =
[
new(0x00000400, 0x80000400)
];
InstEncoding[] sizeSizeSizeConstraints =
[
new(0x00400000, 0x00C00000),
new(0x00800000, 0x00C00000),
};
new(0x00C00000, 0x00C00000)
];
InstEncoding[] rtConstraints2 = new InstEncoding[]
{
new(0x00000018, 0x00000018),
};
InstEncoding[] sfopcConstraints = new InstEncoding[]
{
new(0x00000400, 0x80000400),
};
InstEncoding[] sizeSizeSizeConstraints = new InstEncoding[]
{
new(0x00400000, 0x00C00000),
InstEncoding[] sizeSizeConstraints3 =
[
new(0x00800000, 0x00C00000),
new(0x00C00000, 0x00C00000),
};
new(0x00C00000, 0x00C00000)
];
InstEncoding[] sizeSizeConstraints3 = new InstEncoding[]
{
new(0x00800000, 0x00C00000),
new(0x00C00000, 0x00C00000),
};
InstEncoding[] sfConstraints =
[
new(0x00000000, 0x80000000)
];
InstEncoding[] sfConstraints = new InstEncoding[]
{
new(0x00000000, 0x80000000),
};
InstEncoding[] immhImmhConstraints = new InstEncoding[]
{
InstEncoding[] immhImmhConstraints =
[
new(0x00000000, 0x00780000),
new(0x00400000, 0x00400000),
};
new(0x00400000, 0x00400000)
];
InstEncoding[] sizeSizeConstraints4 = new InstEncoding[]
{
InstEncoding[] sizeSizeConstraints4 =
[
new(0x00C00000, 0x00C00000),
new(0x00000000, 0x00C00000),
};
new(0x00000000, 0x00C00000)
];
InstEncoding[] ssizeSsizeSsizeConstraints = new InstEncoding[]
{
InstEncoding[] ssizeSsizeSsizeConstraints =
[
new(0x00000000, 0x00C00800),
new(0x00400000, 0x00C00800),
new(0x00800000, 0x00C00800),
};
new(0x00800000, 0x00C00800)
];
InstEncoding[] immhOpuConstraints = new InstEncoding[]
{
InstEncoding[] immhOpuConstraints =
[
new(0x00000000, 0x00780000),
new(0x00000000, 0x20001000),
};
new(0x00000000, 0x20001000)
];
InstEncoding[] immhQimmhOpuConstraints = new InstEncoding[]
{
InstEncoding[] immhQimmhOpuConstraints =
[
new(0x00000000, 0x00780000),
new(0x00400000, 0x40400000),
new(0x00000000, 0x20001000),
};
new(0x00000000, 0x20001000)
];
List<InstInfo> insts = new()
{
List<InstInfo> insts =
[
new(0x5AC02000, 0x7FFFFC00, InstName.Abs, IsaVersion.v89, InstFlags.RdRn),
new(0x5EE0B800, 0xFFFFFC00, InstName.AbsAdvsimdS, IsaVersion.v80, InstFlags.RdRnFpSimd),
new(0x0E20B800, 0xBF3FFC00, qsizeConstraints, InstName.AbsAdvsimdV, IsaVersion.v80, InstFlags.RdRnFpSimd),
@@ -1587,7 +1587,7 @@ namespace Ryujinx.Cpu.LightningJit.Arm64.Target.Arm64
new(0xD503203F, 0xFFFFFFFF, InstName.Yield, IsaVersion.v80, InstFlags.None),
new(0x0E003800, 0xBF20FC00, qsizeConstraints, InstName.Zip1Advsimd, IsaVersion.v80, InstFlags.RdRnRmFpSimd),
new(0x0E007800, 0xBF20FC00, qsizeConstraints, InstName.Zip2Advsimd, IsaVersion.v80, InstFlags.RdRnRmFpSimd),
};
];
_table = new(insts);
}

View File

@@ -24,7 +24,7 @@ namespace Ryujinx.Cpu.LightningJit.Cache
}
}
private readonly List<MemoryBlock> _blocks = new();
private readonly List<MemoryBlock> _blocks = [];
public CacheMemoryAllocator(int capacity)
{

View File

@@ -22,7 +22,7 @@ namespace Ryujinx.Cpu.LightningJit.Cache
private static CacheMemoryAllocator _cacheAllocator;
private static readonly List<CacheEntry> _cacheEntries = new();
private static readonly List<CacheEntry> _cacheEntries = [];
private static readonly Lock _lock = new();
private static bool _initialized;

View File

@@ -6,8 +6,8 @@ namespace Ryujinx.Cpu.LightningJit.Cache
{
class JitCacheInvalidation
{
private static readonly int[] _invalidationCode = new int[]
{
private static readonly int[] _invalidationCode =
[
unchecked((int)0xd53b0022), // mrs x2, ctr_el0
unchecked((int)0xd3504c44), // ubfx x4, x2, #16, #4
unchecked((int)0x52800083), // mov w3, #0x4
@@ -35,8 +35,8 @@ namespace Ryujinx.Cpu.LightningJit.Cache
unchecked((int)0x54ffffa8), // b.hi 54 <ic_clear_loop>
unchecked((int)0xd5033b9f), // dsb ish
unchecked((int)0xd5033fdf), // isb
unchecked((int)0xd65f03c0), // ret
};
unchecked((int)0xd65f03c0) // ret
];
private delegate void InvalidateCache(ulong start, ulong end);

View File

@@ -231,7 +231,7 @@ namespace Ryujinx.Cpu.LightningJit.Cache
_sharedCache.Pointer,
SharedCacheSize);
List<(ulong, ThreadLocalCacheEntry)> toDelete = new();
List<(ulong, ThreadLocalCacheEntry)> toDelete = [];
foreach ((ulong address, ThreadLocalCacheEntry entry) in _threadLocalCache)
{

View File

@@ -35,8 +35,8 @@ namespace Ryujinx.Cpu.LightningJit.Cache
{
_alignedRangeAction = alignedRangeAction;
_alignedFunctionAction = alignedFunctionAction;
_pendingFunctions = new();
_ranges = new();
_pendingFunctions = [];
_ranges = [];
}
public bool Has(ulong address)

View File

@@ -26,7 +26,7 @@ namespace Ryujinx.Cpu.LightningJit.CodeGen.Arm64
public Assembler(CodeWriter writer)
{
_code = writer.GetList();
_labels = new List<LabelState>();
_labels = [];
}
public readonly Operand CreateLabel()
@@ -342,7 +342,7 @@ namespace Ryujinx.Cpu.LightningJit.CodeGen.Arm64
public readonly void Cset(Operand rd, ArmCondition condition)
{
Operand zr = new Operand(ZrRegister, RegisterType.Integer, rd.Type);
Operand zr = new(ZrRegister, RegisterType.Integer, rd.Type);
Csinc(rd, zr, zr, (ArmCondition)((int)condition ^ 1));
}
@@ -857,7 +857,7 @@ namespace Ryujinx.Cpu.LightningJit.CodeGen.Arm64
public readonly void PrfmI(Operand rn, int imm, uint type, uint target, uint policy)
{
Operand rt = new Operand((int)EncodeTypeTargetPolicy(type, target, policy), RegisterType.Integer, OperandType.I32);
Operand rt = new((int)EncodeTypeTargetPolicy(type, target, policy), RegisterType.Integer, OperandType.I32);
WriteInstruction(0xf9800000u | (EncodeUImm12(imm, 3) << 10), rt, rn);
}
@@ -868,7 +868,7 @@ namespace Ryujinx.Cpu.LightningJit.CodeGen.Arm64
public readonly void Prfum(Operand rn, int imm, uint type, uint target, uint policy)
{
Operand rt = new Operand((int)EncodeTypeTargetPolicy(type, target, policy), RegisterType.Integer, OperandType.I32);
Operand rt = new((int)EncodeTypeTargetPolicy(type, target, policy), RegisterType.Integer, OperandType.I32);
WriteInstruction(0xf8800000u | (EncodeSImm9(imm) << 12), rt, rn);
}

View File

@@ -16,7 +16,7 @@ namespace Ryujinx.Cpu.LightningJit.CodeGen.Arm64
public TailMerger()
{
_branchPointers = new();
_branchPointers = [];
}
public void AddConditionalReturn(CodeWriter writer, in Assembler asm, ArmCondition returnCondition)

View File

@@ -12,7 +12,7 @@ namespace Ryujinx.Cpu.LightningJit
public CodeWriter()
{
_instructions = new();
_instructions = [];
}
public void WriteInstruction(uint instruction)

Some files were not shown because too many files have changed in this diff Show More