Migrate Collection Expressions

This commit is contained in:
Isaac Marovitz 2024-08-14 14:50:50 +01:00
parent 23fa5f4c9c
commit eb88fc1d06
No known key found for this signature in database
GPG key ID: 97250B2B09A132E1
454 changed files with 5755 additions and 5816 deletions

View file

@ -240,11 +240,11 @@ dotnet_naming_style.IPascalCase.capitalization = pascal_case
# .NET 8 migration (new warnings are caused by the NET 8 C# compiler and analyzer) # .NET 8 migration (new warnings are caused by the NET 8 C# compiler and analyzer)
# The following info messages might need to be fixed in the source code instead of hiding the actual message # The following info messages might need to be fixed in the source code instead of hiding the actual message
# Without the following lines, dotnet format would fail # Without the following lines, dotnet format would fail
# Disable "Collection initialization can be simplified" # Disable "Use collection initializers or expressions"
dotnet_diagnostic.IDE0028.severity = none dotnet_diagnostic.IDE0028.severity = none
dotnet_diagnostic.IDE0300.severity = none # Disable "Use collection expression for stackalloc"
dotnet_diagnostic.IDE0301.severity = none
dotnet_diagnostic.IDE0302.severity = none dotnet_diagnostic.IDE0302.severity = none
# Disable "Use collection expression for fluent"
dotnet_diagnostic.IDE0305.severity = none dotnet_diagnostic.IDE0305.severity = none
# Disable "'new' expression can be simplified" # Disable "'new' expression can be simplified"
dotnet_diagnostic.IDE0090.severity = none dotnet_diagnostic.IDE0090.severity = none

View file

@ -42,7 +42,7 @@ namespace ARMeilleure.CodeGen.Arm64
{ {
Offset = offset; Offset = offset;
Symbol = symbol; Symbol = symbol;
LdrOffsets = new List<(Operand, int)>(); LdrOffsets = [];
} }
} }
@ -78,9 +78,9 @@ namespace ARMeilleure.CodeGen.Arm64
CallArgsRegionSize = maxCallArgs * 16; CallArgsRegionSize = maxCallArgs * 16;
FpLrSaveRegionSize = hasCall ? 16 : 0; FpLrSaveRegionSize = hasCall ? 16 : 0;
_visitedBlocks = new Dictionary<BasicBlock, long>(); _visitedBlocks = [];
_pendingBranches = new Dictionary<BasicBlock, List<(ArmCondition, long)>>(); _pendingBranches = new Dictionary<BasicBlock, List<(ArmCondition, long)>>();
_constantPool = new Dictionary<ulong, ConstantPoolEntry>(); _constantPool = [];
_relocatable = relocatable; _relocatable = relocatable;
} }
@ -266,7 +266,7 @@ namespace ARMeilleure.CodeGen.Arm64
} }
else else
{ {
relocInfo = new RelocInfo(Array.Empty<RelocEntry>()); relocInfo = new RelocInfo([]);
} }
return (code, relocInfo); return (code, relocInfo);

View file

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

View file

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

View file

@ -16,7 +16,7 @@ namespace ARMeilleure.CodeGen.Arm64
public ConstantDict() public ConstantDict()
{ {
_constants = new Dictionary<(ulong, OperandType), Operand>(); _constants = [];
} }
public void Add(ulong value, OperandType type, Operand local) public void Add(ulong value, OperandType type, Operand local)
@ -261,10 +261,10 @@ namespace ARMeilleure.CodeGen.Arm64
Operand dest = operation.Destination; Operand dest = operation.Destination;
List<Operand> sources = new() List<Operand> sources =
{ [
operation.GetSource(0), operation.GetSource(0)
}; ];
int argsCount = operation.SourcesCount - 1; int argsCount = operation.SourcesCount - 1;
@ -365,10 +365,10 @@ namespace ARMeilleure.CodeGen.Arm64
Operation node, Operation node,
Operation operation) Operation operation)
{ {
List<Operand> sources = new() List<Operand> sources =
{ [
operation.GetSource(0), operation.GetSource(0)
}; ];
int argsCount = operation.SourcesCount - 1; 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. // 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. // 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.SetDestinations([actualLow, actualHigh, Local(OperandType.I64), Local(OperandType.I64)]);
operation.SetSources(new[] { address, expectedLow, expectedHigh, desiredLow, desiredHigh }); operation.SetSources([address, expectedLow, expectedHigh, desiredLow, desiredHigh]);
// Add some dummy uses of the input operands, as the CAS operation will be a loop, // 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. // so they can't be used as destination operand.
@ -486,7 +486,7 @@ namespace ARMeilleure.CodeGen.Arm64
else else
{ {
// We need a additional register where the store result will be written to. // 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, // 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. // so they can't be used as destination operand.

View file

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

View file

@ -574,7 +574,7 @@ namespace ARMeilleure.CodeGen.RegisterAllocators
private void InsertSplitCopies() private void InsertSplitCopies()
{ {
Dictionary<int, CopyResolver> copyResolvers = new(); Dictionary<int, CopyResolver> copyResolvers = [];
CopyResolver GetCopyResolver(int position) CopyResolver GetCopyResolver(int position)
{ {
@ -799,8 +799,8 @@ namespace ARMeilleure.CodeGen.RegisterAllocators
private void NumberLocals(ControlFlowGraph cfg, int registersCount) private void NumberLocals(ControlFlowGraph cfg, int registersCount)
{ {
_operationNodes = new List<(IntrusiveList<Operation>, Operation)>(); _operationNodes = [];
_intervals = new List<LiveInterval>(); _intervals = [];
for (int index = 0; index < registersCount; index++) for (int index = 0; index < registersCount; index++)
{ {
@ -980,7 +980,7 @@ namespace ARMeilleure.CodeGen.RegisterAllocators
_blockLiveIn = blkLiveIn; _blockLiveIn = blkLiveIn;
_blockEdges = new HashSet<int>(); _blockEdges = [];
// Compute lifetime intervals. // Compute lifetime intervals.
int operationPos = _operationsCount; int operationPos = _operationsCount;

View file

@ -73,10 +73,10 @@ namespace ARMeilleure.CodeGen.X86
public Assembler(Stream stream, bool relocatable) public Assembler(Stream stream, bool relocatable)
{ {
_stream = stream; _stream = stream;
_labels = new Dictionary<Operand, long>(); _labels = [];
_jumps = new List<Jump>(); _jumps = [];
_relocs = relocatable ? new List<Reloc>() : null; _relocs = relocatable ? [] : null;
} }
public void MarkLabel(Operand label) public void MarkLabel(Operand label)
@ -1418,7 +1418,7 @@ namespace ARMeilleure.CodeGen.X86
int relocOffset = 0; int relocOffset = 0;
var relocEntries = hasRelocs var relocEntries = hasRelocs
? new RelocEntry[relocs.Length] ? new RelocEntry[relocs.Length]
: Array.Empty<RelocEntry>(); : [];
for (int i = 0; i < jumps.Length; i++) for (int i = 0; i < jumps.Length; i++)
{ {

View file

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

View file

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

View file

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

View file

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

View file

@ -31,11 +31,11 @@ namespace ARMeilleure.Common
_pageIndex = -1; _pageIndex = -1;
_page = null; _page = null;
_pages = new List<PageInfo>(); _pages = [];
_pageSize = pageSize; _pageSize = pageSize;
_pageCount = pageCount; _pageCount = pageCount;
_extras = new List<IntPtr>(); _extras = [];
} }
public Span<T> AllocateSpan<T>(ulong count) where T : unmanaged public Span<T> AllocateSpan<T>(ulong count) where T : unmanaged

View file

@ -41,7 +41,7 @@ namespace ARMeilleure.Common
} }
_allocated = new BitMap(NativeAllocator.Instance); _allocated = new BitMap(NativeAllocator.Instance);
_pages = new Dictionary<int, IntPtr>(); _pages = [];
_pageLogCapacity = BitOperations.Log2((uint)(pageSize / sizeof(TEntry))); _pageLogCapacity = BitOperations.Log2((uint)(pageSize / sizeof(TEntry)));
_pageCapacity = 1 << _pageLogCapacity; _pageCapacity = 1 << _pageLogCapacity;
} }

View file

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

View file

@ -20,11 +20,11 @@ namespace ARMeilleure.Decoders
public static Block[] Decode(IMemoryManager memory, ulong address, ExecutionMode mode, bool highCq, DecoderMode dMode) 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(); Queue<Block> workQueue = new();
Dictionary<ulong, Block> visited = new(); Dictionary<ulong, Block> visited = [];
Debug.Assert(MaxInstsPerFunctionLowCq <= MaxInstsPerFunction); Debug.Assert(MaxInstsPerFunctionLowCq <= MaxInstsPerFunction);

View file

@ -4,13 +4,15 @@ namespace ARMeilleure.Decoders
{ {
class OpCode32SimdMemPair : OpCode32, IOpCode32Simd class OpCode32SimdMemPair : OpCode32, IOpCode32Simd
{ {
#pragma warning disable IDE0055 // Disable formatting
private static readonly int[] _regsMap = private static readonly int[] _regsMap =
{ [
1, 1, 4, 2, 1, 1, 4, 2,
1, 1, 3, 1, 1, 1, 3, 1,
1, 1, 2, 1, 1, 1, 2, 1,
1, 1, 1, 1, 1, 1, 1, 1,
}; ];
#pragma warning restore IDE0055
public int Vd { get; } public int Vd { get; }
public int Rn { 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) 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 cond = (opCode >> 4) & 0xf;
int mask = opCode & 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> _allInstA32 = [];
private static readonly List<InstInfo> _allInstT32 = new(); private static readonly List<InstInfo> _allInstT32 = [];
private static readonly List<InstInfo> _allInstA64 = new(); private static readonly List<InstInfo> _allInstA64 = [];
private static readonly InstInfo[][] _instA32FastLookup = new InstInfo[FastLookupSize][]; private static readonly InstInfo[][] _instA32FastLookup = new InstInfo[FastLookupSize][];
private static readonly InstInfo[][] _instT32FastLookup = new InstInfo[FastLookupSize][]; private static readonly InstInfo[][] _instT32FastLookup = new InstInfo[FastLookupSize][];
@ -1328,7 +1328,7 @@ namespace ARMeilleure.Decoders
for (int index = 0; index < temp.Length; index++) for (int index = 0; index < temp.Length; index++)
{ {
temp[index] = new List<InstInfo>(); temp[index] = [];
} }
foreach (InstInfo inst in allInsts) foreach (InstInfo inst in allInsts)

View file

@ -24,8 +24,8 @@ namespace ARMeilleure.Diagnostics
_builder = new StringBuilder(); _builder = new StringBuilder();
_localNames = new Dictionary<Operand, string>(); _localNames = [];
_symbolNames = new Dictionary<ulong, string>(); _symbolNames = [];
} }
private void Indent() private void Indent()

View file

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

View file

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

View file

@ -18,19 +18,19 @@ namespace ARMeilleure.Instructions
static class InstEmitSimdHelper static class InstEmitSimdHelper
{ {
#region "Masks" #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 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 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 | 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 | 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; 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 #endregion
#region "X86 SSE Intrinsics" #region "X86 SSE Intrinsics"
public static readonly Intrinsic[] X86PaddInstruction = new Intrinsic[] public static readonly Intrinsic[] X86PaddInstruction =
{ [
Intrinsic.X86Paddb, Intrinsic.X86Paddb,
Intrinsic.X86Paddw, Intrinsic.X86Paddw,
Intrinsic.X86Paddd, Intrinsic.X86Paddd,
Intrinsic.X86Paddq, Intrinsic.X86Paddq
}; ];
public static readonly Intrinsic[] X86PcmpeqInstruction = new Intrinsic[] public static readonly Intrinsic[] X86PcmpeqInstruction =
{ [
Intrinsic.X86Pcmpeqb, Intrinsic.X86Pcmpeqb,
Intrinsic.X86Pcmpeqw, Intrinsic.X86Pcmpeqw,
Intrinsic.X86Pcmpeqd, Intrinsic.X86Pcmpeqd,
Intrinsic.X86Pcmpeqq, Intrinsic.X86Pcmpeqq
}; ];
public static readonly Intrinsic[] X86PcmpgtInstruction = new Intrinsic[] public static readonly Intrinsic[] X86PcmpgtInstruction =
{ [
Intrinsic.X86Pcmpgtb, Intrinsic.X86Pcmpgtb,
Intrinsic.X86Pcmpgtw, Intrinsic.X86Pcmpgtw,
Intrinsic.X86Pcmpgtd, Intrinsic.X86Pcmpgtd,
Intrinsic.X86Pcmpgtq, Intrinsic.X86Pcmpgtq
}; ];
public static readonly Intrinsic[] X86PmaxsInstruction = new Intrinsic[] public static readonly Intrinsic[] X86PmaxsInstruction =
{ [
Intrinsic.X86Pmaxsb, Intrinsic.X86Pmaxsb,
Intrinsic.X86Pmaxsw, Intrinsic.X86Pmaxsw,
Intrinsic.X86Pmaxsd, Intrinsic.X86Pmaxsd
}; ];
public static readonly Intrinsic[] X86PmaxuInstruction = new Intrinsic[] public static readonly Intrinsic[] X86PmaxuInstruction =
{ [
Intrinsic.X86Pmaxub, Intrinsic.X86Pmaxub,
Intrinsic.X86Pmaxuw, Intrinsic.X86Pmaxuw,
Intrinsic.X86Pmaxud, Intrinsic.X86Pmaxud
}; ];
public static readonly Intrinsic[] X86PminsInstruction = new Intrinsic[] public static readonly Intrinsic[] X86PminsInstruction =
{ [
Intrinsic.X86Pminsb, Intrinsic.X86Pminsb,
Intrinsic.X86Pminsw, Intrinsic.X86Pminsw,
Intrinsic.X86Pminsd, Intrinsic.X86Pminsd
}; ];
public static readonly Intrinsic[] X86PminuInstruction = new Intrinsic[] public static readonly Intrinsic[] X86PminuInstruction =
{ [
Intrinsic.X86Pminub, Intrinsic.X86Pminub,
Intrinsic.X86Pminuw, Intrinsic.X86Pminuw,
Intrinsic.X86Pminud, Intrinsic.X86Pminud
}; ];
public static readonly Intrinsic[] X86PmovsxInstruction = new Intrinsic[] public static readonly Intrinsic[] X86PmovsxInstruction =
{ [
Intrinsic.X86Pmovsxbw, Intrinsic.X86Pmovsxbw,
Intrinsic.X86Pmovsxwd, Intrinsic.X86Pmovsxwd,
Intrinsic.X86Pmovsxdq, Intrinsic.X86Pmovsxdq
}; ];
public static readonly Intrinsic[] X86PmovzxInstruction = new Intrinsic[] public static readonly Intrinsic[] X86PmovzxInstruction =
{ [
Intrinsic.X86Pmovzxbw, Intrinsic.X86Pmovzxbw,
Intrinsic.X86Pmovzxwd, Intrinsic.X86Pmovzxwd,
Intrinsic.X86Pmovzxdq, Intrinsic.X86Pmovzxdq
}; ];
public static readonly Intrinsic[] X86PsllInstruction = new Intrinsic[] public static readonly Intrinsic[] X86PsllInstruction =
{ [
0, 0,
Intrinsic.X86Psllw, Intrinsic.X86Psllw,
Intrinsic.X86Pslld, Intrinsic.X86Pslld,
Intrinsic.X86Psllq, Intrinsic.X86Psllq
}; ];
public static readonly Intrinsic[] X86PsraInstruction = new Intrinsic[] public static readonly Intrinsic[] X86PsraInstruction =
{ [
0, 0,
Intrinsic.X86Psraw, Intrinsic.X86Psraw,
Intrinsic.X86Psrad, Intrinsic.X86Psrad
}; ];
public static readonly Intrinsic[] X86PsrlInstruction = new Intrinsic[] public static readonly Intrinsic[] X86PsrlInstruction =
{ [
0, 0,
Intrinsic.X86Psrlw, Intrinsic.X86Psrlw,
Intrinsic.X86Psrld, Intrinsic.X86Psrld,
Intrinsic.X86Psrlq, Intrinsic.X86Psrlq
}; ];
public static readonly Intrinsic[] X86PsubInstruction = new Intrinsic[] public static readonly Intrinsic[] X86PsubInstruction =
{ [
Intrinsic.X86Psubb, Intrinsic.X86Psubb,
Intrinsic.X86Psubw, Intrinsic.X86Psubw,
Intrinsic.X86Psubd, Intrinsic.X86Psubd,
Intrinsic.X86Psubq, Intrinsic.X86Psubq
}; ];
public static readonly Intrinsic[] X86PunpckhInstruction = new Intrinsic[] public static readonly Intrinsic[] X86PunpckhInstruction =
{ [
Intrinsic.X86Punpckhbw, Intrinsic.X86Punpckhbw,
Intrinsic.X86Punpckhwd, Intrinsic.X86Punpckhwd,
Intrinsic.X86Punpckhdq, Intrinsic.X86Punpckhdq,
Intrinsic.X86Punpckhqdq, Intrinsic.X86Punpckhqdq
}; ];
public static readonly Intrinsic[] X86PunpcklInstruction = new Intrinsic[] public static readonly Intrinsic[] X86PunpcklInstruction =
{ [
Intrinsic.X86Punpcklbw, Intrinsic.X86Punpcklbw,
Intrinsic.X86Punpcklwd, Intrinsic.X86Punpcklwd,
Intrinsic.X86Punpckldq, Intrinsic.X86Punpckldq,
Intrinsic.X86Punpcklqdq, Intrinsic.X86Punpcklqdq
}; ];
#endregion #endregion
public static void EnterArmFpMode(EmitterContext context, Func<FPState, Operand> getFpFlag) public static void EnterArmFpMode(EmitterContext context, Func<FPState, Operand> getFpFlag)
@ -460,8 +460,8 @@ namespace ARMeilleure.Instructions
IOpCodeSimd op = (IOpCodeSimd)context.CurrOp; IOpCodeSimd op = (IOpCodeSimd)context.CurrOp;
MethodInfo info = (op.Size & 1) == 0 MethodInfo info = (op.Size & 1) == 0
? typeof(MathF).GetMethod(name, new Type[] { typeof(float) }) ? typeof(MathF).GetMethod(name, [typeof(float)])
: typeof(Math).GetMethod(name, new Type[] { typeof(double) }); : typeof(Math).GetMethod(name, [typeof(double)]);
return context.Call(info, n); return context.Call(info, n);
} }
@ -473,8 +473,8 @@ namespace ARMeilleure.Instructions
string name = nameof(Math.Round); string name = nameof(Math.Round);
MethodInfo info = (op.Size & 1) == 0 MethodInfo info = (op.Size & 1) == 0
? typeof(MathF).GetMethod(name, new Type[] { typeof(float), typeof(MidpointRounding) }) ? typeof(MathF).GetMethod(name, [typeof(float), typeof(MidpointRounding)])
: typeof(Math).GetMethod(name, new Type[] { typeof(double), typeof(MidpointRounding) }); : typeof(Math).GetMethod(name, [typeof(double), typeof(MidpointRounding)]);
return context.Call(info, n, Const((int)roundMode)); return context.Call(info, n, Const((int)roundMode));
} }

View file

@ -12,17 +12,17 @@ namespace ARMeilleure.Instructions
static partial class InstEmit static partial class InstEmit
{ {
#region "Masks" #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, 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 | 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 #endregion
public static void Dup_Gp(ArmEmitterContext context) public static void Dup_Gp(ArmEmitterContext context)
@ -601,7 +601,7 @@ namespace ARMeilleure.Instructions
{ {
Operand d = GetVec(op.Rd); Operand d = GetVec(op.Rd);
List<Operand> args = new(); List<Operand> args = [];
if (!isTbl) if (!isTbl)
{ {

View file

@ -13,17 +13,17 @@ namespace ARMeilleure.Instructions
{ {
#region "Masks" #region "Masks"
// Same as InstEmitSimdMove, as the instructions do the same thing. // 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, 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 | 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 #endregion
public static void Vmov_I(ArmEmitterContext context) public static void Vmov_I(ArmEmitterContext context)

View file

@ -16,12 +16,14 @@ namespace ARMeilleure.Instructions
static partial class InstEmit static partial class InstEmit
{ {
#pragma warning disable IDE0055 // Disable formatting
#region "Masks" #region "Masks"
private static readonly long[] _masks_SliSri = new long[] // Replication masks. private static readonly long[] _masks_SliSri = // Replication masks.
{ [
0x0101010101010101L, 0x0001000100010001L, 0x0000000100000001L, 0x0000000000000001L, 0x0101010101010101L, 0x0001000100010001L, 0x0000000100000001L, 0x0000000000000001L,
}; ];
#endregion #endregion
#pragma warning restore IDE0055
public static void Rshrn_V(ArmEmitterContext context) public static void Rshrn_V(ArmEmitterContext context)
{ {

View file

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

View file

@ -198,7 +198,7 @@ namespace ARMeilleure.Signal
ControlFlowGraph cfg = context.GetControlFlowGraph(); 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; return Compiler.Compile(cfg, argTypes, OperandType.None, CompilerOptions.HighCq, RuntimeInformation.ProcessArchitecture).Code;
} }
@ -252,7 +252,7 @@ namespace ARMeilleure.Signal
ControlFlowGraph cfg = context.GetControlFlowGraph(); 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; 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(); 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>(); return Compiler.Compile(cfg, argTypes, OperandType.I32, CompilerOptions.HighCq, RuntimeInformation.ProcessArchitecture).Map<DebugPartialUnmap>();
} }
@ -47,7 +47,7 @@ namespace ARMeilleure.Signal
ControlFlowGraph cfg = context.GetControlFlowGraph(); 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>(); return Compiler.Compile(cfg, argTypes, OperandType.I32, CompilerOptions.HighCq, RuntimeInformation.ProcessArchitecture).Map<DebugThreadLocalMapGetOrReserve>();
} }
@ -76,7 +76,7 @@ namespace ARMeilleure.Signal
ControlFlowGraph cfg = context.GetControlFlowGraph(); 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>(); 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; } public Aarch32Mode Mode { get; }
private int _ifThenBlockStateIndex = 0; private int _ifThenBlockStateIndex = 0;
private Condition[] _ifThenBlockState = Array.Empty<Condition>(); private Condition[] _ifThenBlockState = [];
public bool IsInIfThenBlock => _ifThenBlockStateIndex < _ifThenBlockState.Length; public bool IsInIfThenBlock => _ifThenBlockStateIndex < _ifThenBlockState.Length;
public Condition CurrentIfThenBlockCond => _ifThenBlockState[_ifThenBlockStateIndex]; public Condition CurrentIfThenBlockCond => _ifThenBlockState[_ifThenBlockStateIndex];
@ -78,7 +78,7 @@ namespace ARMeilleure.Translation
HasPtc = hasPtc; HasPtc = hasPtc;
Mode = mode; Mode = mode;
_labels = new Dictionary<ulong, Operand>(); _labels = [];
} }
public override Operand Call(MethodInfo info, params Operand[] callArgs) public override Operand Call(MethodInfo info, params Operand[] callArgs)

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) public CacheMemoryAllocator(int capacity)
{ {

View file

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

View file

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

View file

@ -80,7 +80,7 @@ namespace ARMeilleure.Translation
static Delegates() static Delegates()
{ {
_delegates = new SortedList<string, DelegateInfo>(); _delegates = [];
SetDelegateInfo(new MathAbs(Math.Abs)); SetDelegateInfo(new MathAbs(Math.Abs));
SetDelegateInfo(new MathCeiling(Math.Ceiling)); SetDelegateInfo(new MathCeiling(Math.Ceiling));

View file

@ -25,7 +25,7 @@ namespace ARMeilleure.Translation
{ {
_localsCount = 0; _localsCount = 0;
_irLabels = new Dictionary<Operand, BasicBlock>(); _irLabels = [];
_irBlocks = new IntrusiveList<BasicBlock>(); _irBlocks = new IntrusiveList<BasicBlock>();
_needsNewBlock = true; _needsNewBlock = true;

View file

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

View file

@ -151,7 +151,7 @@ namespace ARMeilleure.Translation.PTC
private void InitializeCarriers() private void InitializeCarriers()
{ {
_infosStream = MemoryStreamManager.Shared.GetStream(); _infosStream = MemoryStreamManager.Shared.GetStream();
_codesList = new List<byte[]>(); _codesList = [];
_relocsStream = MemoryStreamManager.Shared.GetStream(); _relocsStream = MemoryStreamManager.Shared.GetStream();
_unwindInfosStream = MemoryStreamManager.Shared.GetStream(); _unwindInfosStream = MemoryStreamManager.Shared.GetStream();
} }
@ -318,7 +318,7 @@ namespace ARMeilleure.Translation.PTC
return false; return false;
} }
ReadOnlySpan<byte> codesBytes = (int)innerHeader.CodesLength > 0 ? new(stream.PositionPointer, (int)innerHeader.CodesLength) : ReadOnlySpan<byte>.Empty; ReadOnlySpan<byte> codesBytes = (int)innerHeader.CodesLength > 0 ? new(stream.PositionPointer, (int)innerHeader.CodesLength) : [];
stream.Seek(innerHeader.CodesLength, SeekOrigin.Current); stream.Seek(innerHeader.CodesLength, SeekOrigin.Current);
Hash128 codesHash = XXHash128.ComputeHash(codesBytes); Hash128 codesHash = XXHash128.ComputeHash(codesBytes);
@ -467,7 +467,7 @@ namespace ARMeilleure.Translation.PTC
ReadOnlySpan<byte> infosBytes = new(stream.PositionPointer, innerHeader.InfosLength); ReadOnlySpan<byte> infosBytes = new(stream.PositionPointer, innerHeader.InfosLength);
_infosStream.WriteTo(stream); _infosStream.WriteTo(stream);
ReadOnlySpan<byte> codesBytes = (int)innerHeader.CodesLength > 0 ? new(stream.PositionPointer, (int)innerHeader.CodesLength) : ReadOnlySpan<byte>.Empty; ReadOnlySpan<byte> codesBytes = (int)innerHeader.CodesLength > 0 ? new(stream.PositionPointer, (int)innerHeader.CodesLength) : [];
_codesList.WriteTo(stream); _codesList.WriteTo(stream);
ReadOnlySpan<byte> relocsBytes = new(stream.PositionPointer, innerHeader.RelocsLength); ReadOnlySpan<byte> relocsBytes = new(stream.PositionPointer, innerHeader.RelocsLength);
@ -758,7 +758,7 @@ namespace ARMeilleure.Translation.PTC
private void StubCode(int index) private void StubCode(int index)
{ {
_codesList[index] = Array.Empty<byte>(); _codesList[index] = [];
} }
private void StubReloc(int relocEntriesCount) private void StubReloc(int relocEntriesCount)
@ -843,7 +843,7 @@ namespace ARMeilleure.Translation.PTC
} }
} }
List<Thread> threads = new(); List<Thread> threads = [];
for (int i = 0; i < degreeOfParallelism; i++) for (int i = 0; i < degreeOfParallelism; i++)
{ {

View file

@ -12,7 +12,7 @@ namespace ARMeilleure.Translation.PTC
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(MethodImplOptions.AggressiveInlining)]
public static Dictionary<TKey, TValue> DeserializeDictionary<TKey, TValue>(Stream stream, Func<Stream, TValue> valueFunc) where TKey : struct public static Dictionary<TKey, TValue> DeserializeDictionary<TKey, TValue>(Stream stream, Func<Stream, TValue> valueFunc) where TKey : struct
{ {
Dictionary<TKey, TValue> dictionary = new(); Dictionary<TKey, TValue> dictionary = [];
int count = DeserializeStructure<int>(stream); int count = DeserializeStructure<int>(stream);
@ -30,7 +30,7 @@ namespace ARMeilleure.Translation.PTC
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(MethodImplOptions.AggressiveInlining)]
public static Dictionary<TKey, TValue> DeserializeAndUpdateDictionary<TKey, TValue>(Stream stream, Func<Stream, TValue> valueFunc, Func<TKey, TValue, (TKey, TValue)> updateFunc) where TKey : struct public static Dictionary<TKey, TValue> DeserializeAndUpdateDictionary<TKey, TValue>(Stream stream, Func<Stream, TValue> valueFunc, Func<TKey, TValue, (TKey, TValue)> updateFunc) where TKey : struct
{ {
Dictionary<TKey, TValue> dictionary = new(); Dictionary<TKey, TValue> dictionary = [];
int count = DeserializeStructure<int>(stream); int count = DeserializeStructure<int>(stream);
@ -50,7 +50,7 @@ namespace ARMeilleure.Translation.PTC
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(MethodImplOptions.AggressiveInlining)]
public static List<T> DeserializeList<T>(Stream stream) where T : struct public static List<T> DeserializeList<T>(Stream stream) where T : struct
{ {
List<T> list = new(); List<T> list = [];
int count = DeserializeStructure<int>(stream); int count = DeserializeStructure<int>(stream);

View file

@ -25,9 +25,10 @@ namespace ARMeilleure.Translation.PTC
private const uint InternalVersion = 5518; //! Not to be incremented manually for each change to the ARMeilleure project. private const uint InternalVersion = 5518; //! Not to be incremented manually for each change to the ARMeilleure project.
private static readonly uint[] _migrateInternalVersions = { private static readonly uint[] _migrateInternalVersions =
1866, [
}; 1866
];
private const int SaveInterval = 30; // Seconds. private const int SaveInterval = 30; // Seconds.
@ -69,7 +70,7 @@ namespace ARMeilleure.Translation.PTC
_disposed = false; _disposed = false;
ProfiledFuncs = new Dictionary<ulong, FuncProfile>(); ProfiledFuncs = [];
Enabled = false; Enabled = false;
} }

View file

@ -9,7 +9,7 @@ namespace ARMeilleure.Translation
{ {
public static void Rename(ControlFlowGraph cfg) public static void Rename(ControlFlowGraph cfg)
{ {
Dictionary<Register, Operand> registerToLocalMap = new(); Dictionary<Register, Operand> registerToLocalMap = [];
Operand GetLocal(Operand op) Operand GetLocal(Operand op)
{ {

View file

@ -17,7 +17,7 @@ namespace ARMeilleure.Translation
public DefMap() public DefMap()
{ {
_map = new Dictionary<int, Operand>(); _map = [];
_phiMasks = new BitMap(Allocators.Default, RegisterConsts.TotalCount); _phiMasks = new BitMap(Allocators.Default, RegisterConsts.TotalCount);
} }

View file

@ -23,24 +23,22 @@ namespace ARMeilleure.Translation
public class Translator public class Translator
{ {
private static readonly AddressTable<ulong>.Level[] _levels64Bit = private static readonly AddressTable<ulong>.Level[] _levels64Bit =
new AddressTable<ulong>.Level[] [
{
new(31, 17), new(31, 17),
new(23, 8), new(23, 8),
new(15, 8), new(15, 8),
new(7, 8), new(7, 8),
new( 2, 5), new(2, 5)
}; ];
private static readonly AddressTable<ulong>.Level[] _levels32Bit = private static readonly AddressTable<ulong>.Level[] _levels32Bit =
new AddressTable<ulong>.Level[] [
{
new(31, 17), new(31, 17),
new(23, 8), new(23, 8),
new(15, 8), new(15, 8),
new(7, 8), new(7, 8),
new( 1, 6), new(1, 6)
}; ];
private readonly IJitMemoryAllocator _allocator; private readonly IJitMemoryAllocator _allocator;
private readonly ConcurrentQueue<KeyValuePair<ulong, TranslatedFunction>> _oldFuncs; private readonly ConcurrentQueue<KeyValuePair<ulong, TranslatedFunction>> _oldFuncs;
@ -498,7 +496,7 @@ namespace ARMeilleure.Translation
public void InvalidateJitCacheRegion(ulong address, ulong size) public void InvalidateJitCacheRegion(ulong address, ulong size)
{ {
ulong[] overlapAddresses = Array.Empty<ulong>(); ulong[] overlapAddresses = [];
int overlapsCount = Functions.GetOverlaps(address, size, ref overlapAddresses); int overlapsCount = Functions.GetOverlaps(address, size, ref overlapAddresses);

View file

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

View file

@ -139,7 +139,7 @@ namespace ARMeilleure.Translation
ControlFlowGraph cfg = context.GetControlFlowGraph(); 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>(); 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 Minus6dBInQ15 = (int)(0.501f * RawQ15One);
private const int Minus12dBInQ15 = (int)(0.251f * RawQ15One); private const int Minus12dBInQ15 = (int)(0.251f * RawQ15One);
private static readonly long[] _defaultSurroundToStereoCoefficients = new long[4] private static readonly long[] _defaultSurroundToStereoCoefficients =
{ [
RawQ15One, RawQ15One,
Minus3dBInQ15, Minus3dBInQ15,
Minus12dBInQ15, Minus12dBInQ15,
Minus3dBInQ15, Minus3dBInQ15
}; ];
private static readonly long[] _defaultStereoToMonoCoefficients = new long[2] private static readonly long[] _defaultStereoToMonoCoefficients =
{ [
Minus6dBInQ15, Minus6dBInQ15,
Minus6dBInQ15, Minus6dBInQ15
}; ];
private const int SurroundChannelCount = 6; private const int SurroundChannelCount = 6;
private const int StereoChannelCount = 2; private const int StereoChannelCount = 2;

View file

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

View file

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

View file

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

View file

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

View file

@ -11,7 +11,7 @@ namespace Ryujinx.Audio.Renderer.Device
/// <summary> /// <summary>
/// The session registry, used to store the sessions of a given AppletResourceId. /// The session registry, used to store the sessions of a given AppletResourceId.
/// </summary> /// </summary>
private readonly Dictionary<ulong, VirtualDeviceSession[]> _sessionsRegistry = new(); private readonly Dictionary<ulong, VirtualDeviceSession[]> _sessionsRegistry = [];
/// <summary> /// <summary>
/// The default <see cref="VirtualDevice"/>. /// The default <see cref="VirtualDevice"/>.

View file

@ -46,7 +46,7 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
SampleRate = sampleRate; SampleRate = sampleRate;
BufferCount = mixBufferCount + voiceChannelCountMax; BufferCount = mixBufferCount + voiceChannelCountMax;
Buffers = mixBuffer; Buffers = mixBuffer;
Commands = new List<ICommand>(); Commands = [];
MemoryManager = memoryManager; MemoryManager = memoryManager;
_buffersEntryCount = Buffers.Length; _buffersEntryCount = Buffers.Length;
@ -97,7 +97,7 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
{ {
if (index < 0 || index >= _buffersEntryCount) if (index < 0 || index >= _buffersEntryCount)
{ {
return Span<float>.Empty; return [];
} }
unsafe unsafe

View file

@ -9,21 +9,21 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
{ {
public class Reverb3dCommand : ICommand 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[] _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 = 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[] _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 = new int[1] { 0 }; 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[] _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 = 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[] _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 = new int[2] { 0, 1 }; 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[] _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 = 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[] _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 = new int[4] { 0, 1, 2, 3 }; 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[] _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 = 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[] _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 = new int[6] { 0, 1, 2, 3, -1, 3 }; private static readonly int[] _targetOutputFeedbackIndicesTableSurround = [0, 1, 2, 3, -1, 3];
public bool Enabled { get; set; } public bool Enabled { get; set; }

View file

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

View file

@ -130,7 +130,7 @@ namespace Ryujinx.Audio.Renderer.Dsp
switch (info.SampleFormat) switch (info.SampleFormat)
{ {
case SampleFormat.Adpcm: case SampleFormat.Adpcm:
ReadOnlySpan<byte> waveBufferAdpcm = ReadOnlySpan<byte>.Empty; ReadOnlySpan<byte> waveBufferAdpcm = [];
if (waveBuffer.Buffer != 0 && waveBuffer.BufferSize != 0) if (waveBuffer.Buffer != 0 && waveBuffer.BufferSize != 0)
{ {
@ -142,7 +142,7 @@ namespace Ryujinx.Audio.Renderer.Dsp
decodedSampleCount = AdpcmHelper.Decode(tempSpan, waveBufferAdpcm, targetSampleStartOffset, targetSampleEndOffset, offset, sampleCountToDecode - y, coefficients, ref voiceState.LoopContext); decodedSampleCount = AdpcmHelper.Decode(tempSpan, waveBufferAdpcm, targetSampleStartOffset, targetSampleEndOffset, offset, sampleCountToDecode - y, coefficients, ref voiceState.LoopContext);
break; break;
case SampleFormat.PcmInt16: case SampleFormat.PcmInt16:
ReadOnlySpan<short> waveBufferPcm16 = ReadOnlySpan<short>.Empty; ReadOnlySpan<short> waveBufferPcm16 = [];
if (waveBuffer.Buffer != 0 && waveBuffer.BufferSize != 0) if (waveBuffer.Buffer != 0 && waveBuffer.BufferSize != 0)
{ {
@ -155,7 +155,7 @@ namespace Ryujinx.Audio.Renderer.Dsp
decodedSampleCount = PcmHelper.Decode(tempSpan, waveBufferPcm16, targetSampleStartOffset, targetSampleEndOffset, info.ChannelIndex, info.ChannelCount); decodedSampleCount = PcmHelper.Decode(tempSpan, waveBufferPcm16, targetSampleStartOffset, targetSampleEndOffset, info.ChannelIndex, info.ChannelCount);
break; break;
case SampleFormat.PcmFloat: case SampleFormat.PcmFloat:
ReadOnlySpan<float> waveBufferPcmFloat = ReadOnlySpan<float>.Empty; ReadOnlySpan<float> waveBufferPcmFloat = [];
if (waveBuffer.Buffer != 0 && waveBuffer.BufferSize != 0) if (waveBuffer.Buffer != 0 && waveBuffer.BufferSize != 0)
{ {

View file

@ -9,8 +9,9 @@ namespace Ryujinx.Audio.Renderer.Dsp
{ {
public static class ResamplerHelper public static class ResamplerHelper
{ {
#pragma warning disable IDE0055 // Disable formatting
#region "Default Quality Lookup Tables" #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, 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, 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, 5659, 19342, 7728, 55, 5546, 19321, 7857, 62, 5434, 19298, 7987, 69, 5323, 19273, 8118, 77,
@ -43,9 +44,9 @@ namespace Ryujinx.Audio.Renderer.Dsp
77, 8118, 19273, 5323, 69, 7987, 19298, 5434, 62, 7857, 19321, 5546, 55, 7728, 19342, 5659, 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, 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, -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, -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, -990, 32323, 1352, -92, -1084, 32244, 1536, -103, -1173, 32157, 1724, -115, -1258, 32061, 1919, -128,
@ -78,9 +79,9 @@ namespace Ryujinx.Audio.Renderer.Dsp
-128, 1919, 32061, -1258, -115, 1724, 32157, -1173, -103, 1536, 32244, -1084, -92, 1352, 32323, -990, -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, -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, 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, 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, 2227, 26085, 4512, -63, 2120, 26035, 4673, -67, 2015, 25980, 4837, -72, 1912, 25919, 5004, -76,
@ -113,11 +114,11 @@ namespace Ryujinx.Audio.Renderer.Dsp
-76, 5004, 25919, 1912, -72, 4837, 25980, 2015, -67, 4673, 26035, 2120, -63, 4512, 26085, 2227, -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, -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 #endregion
#region "High Quality Lookup Tables" #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, -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, -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, -549, -142, 8370, 16375, 9203, 139, -622, -2, -541, -170, 8277, 16369, 9295, 173, -630, -3,
@ -182,9 +183,9 @@ namespace Ryujinx.Audio.Renderer.Dsp
-3, -630, 173, 9295, 16369, 8277, -170, -541, -2, -622, 139, 9203, 16375, 8370, -142, -549, -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, -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, -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, -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, -66, 284, -950, 32694, 989, -277, 63, -5, -78, 340, -1143, 32658, 1226, -346, 79, -6,
@ -249,9 +250,9 @@ namespace Ryujinx.Audio.Renderer.Dsp
-6, 79, -346, 1226, 32658, -1143, 340, -78, -5, 63, -277, 989, 32694, -950, 284, -66, -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, -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, 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, 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, 423, -2430, 5410, 24582, 7030, -2658, 406, 4, 423, -2402, 5236, 24565, 7216, -2680, 403, 5,
@ -316,8 +317,9 @@ namespace Ryujinx.Audio.Renderer.Dsp
5, 403, -2680, 7216, 24565, 5236, -2402, 423, 4, 406, -2658, 7030, 24582, 5410, -2430, 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, 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 #endregion
#pragma warning restore IDE0055
private static readonly float[] _normalCurveLut0F; private static readonly float[] _normalCurveLut0F;
private static readonly float[] _normalCurveLut1F; private static readonly float[] _normalCurveLut1F;

View file

@ -6,12 +6,12 @@ namespace Ryujinx.Audio.Renderer.Dsp.State
{ {
public struct Reverb3dState public struct Reverb3dState
{ {
private readonly float[] _fdnDelayMinTimes = new float[4] { 5.0f, 6.0f, 13.0f, 14.0f }; private readonly float[] _fdnDelayMinTimes = [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[] _fdnDelayMaxTimes = [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[] _decayDelayMaxTimes1 = [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[] _decayDelayMaxTimes2 = [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 }; 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 = 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 }; 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 IDelayLine[] FdnDelayLines { get; }
public DecayDelay[] DecayDelays1 { get; } public DecayDelay[] DecayDelays1 { get; }

View file

@ -7,8 +7,9 @@ namespace Ryujinx.Audio.Renderer.Dsp.State
{ {
public struct ReverbState public struct ReverbState
{ {
private static readonly float[] _fdnDelayTimes = new float[20] #pragma warning disable IDE0055 // Disable formatting
{ private static readonly float[] _fdnDelayTimes =
[
// Room // Room
53.953247f, 79.192566f, 116.238770f, 130.615295f, 53.953247f, 79.192566f, 116.238770f, 130.615295f,
// Hall // Hall
@ -19,10 +20,10 @@ namespace Ryujinx.Audio.Renderer.Dsp.State
47.03f, 71f, 103f, 170f, 47.03f, 71f, 103f, 170f,
// Max delay (Hall is the one with the highest values so identical to Hall) // 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 // Room
7f, 9f, 13f, 17f, 7f, 9f, 13f, 17f,
// Hall // Hall
@ -33,10 +34,10 @@ namespace Ryujinx.Audio.Renderer.Dsp.State
7f, 7f, 13f, 9f, 7f, 7f, 13f, 9f,
// Max delay (Hall is the one with the highest values so identical to Hall) // 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 // Room
0.0f, 3.5f, 2.8f, 3.9f, 2.7f, 13.4f, 7.9f, 8.4f, 9.9f, 12.0f, 0.0f, 3.5f, 2.8f, 3.9f, 2.7f, 13.4f, 7.9f, 8.4f, 9.9f, 12.0f,
// Chamber // Chamber
@ -47,10 +48,10 @@ namespace Ryujinx.Audio.Renderer.Dsp.State
33.1f, 43.3f, 22.8f, 37.9f, 14.9f, 35.3f, 17.9f, 34.2f, 0.0f, 43.3f, 33.1f, 43.3f, 22.8f, 37.9f, 14.9f, 35.3f, 17.9f, 34.2f, 0.0f, 43.3f,
// Disabled // 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 // Room
0.70f, 0.68f, 0.70f, 0.68f, 0.70f, 0.68f, 0.70f, 0.68f, 0.68f, 0.68f, 0.70f, 0.68f, 0.70f, 0.68f, 0.70f, 0.68f, 0.70f, 0.68f, 0.68f, 0.68f,
// Chamber // Chamber
@ -61,10 +62,11 @@ namespace Ryujinx.Audio.Renderer.Dsp.State
0.93f, 0.92f, 0.87f, 0.86f, 0.94f, 0.81f, 0.80f, 0.77f, 0.76f, 0.65f, 0.93f, 0.92f, 0.87f, 0.86f, 0.94f, 0.81f, 0.80f, 0.77f, 0.76f, 0.65f,
// Disabled // 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,
}; ];
#pragma warning restore IDE0055
private static readonly float[] _preDelayTimes = new float[5] private static readonly float[] _preDelayTimes =
{ [
// Room // Room
12.5f, 12.5f,
// Chamber // Chamber
@ -75,7 +77,7 @@ namespace Ryujinx.Audio.Renderer.Dsp.State
50.0f, 50.0f,
// Disabled // Disabled
0.0f, 0.0f,
}; ];
public DelayLine[] FdnDelayLines { get; } public DelayLine[] FdnDelayLines { get; }
public DecayDelay[] DecayDelays { get; } public DecayDelay[] DecayDelays { get; }

View file

@ -190,7 +190,7 @@ namespace Ryujinx.Audio.Renderer.Server.MemoryPool
} }
} }
return Span<MemoryPoolState>.Empty; return [];
} }
/// <summary> /// <summary>

View file

@ -125,7 +125,7 @@ namespace Ryujinx.Audio.Renderer.Server.Mix
{ {
if (_effectProcessingOrderArrayPointer == IntPtr.Zero) if (_effectProcessingOrderArrayPointer == IntPtr.Zero)
{ {
return Span<int>.Empty; return [];
} }
unsafe unsafe

View file

@ -80,7 +80,7 @@ namespace Ryujinx.Audio.Renderer.Server.Splitter
{ {
if (Unsafe.IsNullRef(ref _v1)) if (Unsafe.IsNullRef(ref _v1))
{ {
return Span<float>.Empty; return [];
} }
else else
{ {
@ -106,7 +106,7 @@ namespace Ryujinx.Audio.Renderer.Server.Splitter
{ {
if (Unsafe.IsNullRef(ref _v1)) if (Unsafe.IsNullRef(ref _v1))
{ {
return Span<float>.Empty; return [];
} }
else else
{ {

View file

@ -13,7 +13,7 @@ namespace Ryujinx.Common
public bool IsCancellationRequested => _cts.IsCancellationRequested; public bool IsCancellationRequested => _cts.IsCancellationRequested;
public AsyncWorkQueue(Action<T> callback, string name = null) : this(callback, name, new BlockingCollection<T>()) public AsyncWorkQueue(Action<T> callback, string name = null) : this(callback, name, [])
{ {
} }

View file

@ -106,7 +106,7 @@ namespace Ryujinx.Common.Collections
/// <returns>A list of all RangeNodes sorted by Key Order</returns> /// <returns>A list of all RangeNodes sorted by Key Order</returns>
public List<RangeNode<TKey, TValue>> AsList() public List<RangeNode<TKey, TValue>> AsList()
{ {
List<RangeNode<TKey, TValue>> list = new(); List<RangeNode<TKey, TValue>> list = [];
AddToList(Root, list); AddToList(Root, list);
@ -492,7 +492,7 @@ namespace Ryujinx.Common.Collections
Start = start; Start = start;
End = end; End = end;
Max = end; Max = end;
Values = new List<RangeNode<TKey, TValue>> { new RangeNode<TKey, TValue>(start, end, value) }; Values = [new RangeNode<TKey, TValue>(start, end, value)];
Parent = parent; Parent = parent;
} }
} }

View file

@ -139,7 +139,7 @@ namespace Ryujinx.Common.Collections
/// <param name="list">List to add the tree pairs into</param> /// <param name="list">List to add the tree pairs into</param>
public List<KeyValuePair<TKey, TValue>> AsLevelOrderList() public List<KeyValuePair<TKey, TValue>> AsLevelOrderList()
{ {
List<KeyValuePair<TKey, TValue>> list = new(); List<KeyValuePair<TKey, TValue>> list = [];
Queue<Node<TKey, TValue>> nodes = new(); 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> /// <returns>A list of all KeyValuePairs sorted by Key Order</returns>
public List<KeyValuePair<TKey, TValue>> AsList() public List<KeyValuePair<TKey, TValue>> AsList()
{ {
List<KeyValuePair<TKey, TValue>> list = new(); List<KeyValuePair<TKey, TValue>> list = [];
AddToList(Root, list); AddToList(Root, list);
@ -574,7 +574,7 @@ namespace Ryujinx.Common.Collections
/// <returns>List of node keys</returns> /// <returns>List of node keys</returns>
private SortedList<TKey, TValue> GetKeyValues() private SortedList<TKey, TValue> GetKeyValues()
{ {
SortedList<TKey, TValue> set = new(); SortedList<TKey, TValue> set = [];
Queue<Node<TKey, TValue>> queue = new(); Queue<Node<TKey, TValue>> queue = new();
if (Root != null) if (Root != null)
{ {

View file

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

View file

@ -131,7 +131,7 @@ namespace Ryujinx.Common.Logging
_enabledClasses[index] = true; _enabledClasses[index] = true;
} }
_logTargets = new List<ILogTarget>(); _logTargets = [];
_time = Stopwatch.StartNew(); _time = Stopwatch.StartNew();

View file

@ -87,7 +87,7 @@ namespace Ryujinx.Common.Memory
/// Gets a span from the array. /// Gets a span from the array.
/// </summary> /// </summary>
/// <returns>Span of the array</returns> /// <returns>Span of the array</returns>
public Span<T> AsSpan() => Length == 0 ? Span<T>.Empty : MemoryMarshal.CreateSpan(ref this[0], Length); public Span<T> AsSpan() => Length == 0 ? [] : MemoryMarshal.CreateSpan(ref this[0], Length);
/// <summary> /// <summary>
/// Gets the array base pointer. /// Gets the array base pointer.

View file

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

View file

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

View file

@ -31,7 +31,8 @@ namespace Ryujinx.Common
private const ulong Prime64_4 = 0x85EBCA77C2B2AE63UL; private const ulong Prime64_4 = 0x85EBCA77C2B2AE63UL;
private const ulong Prime64_5 = 0x27D4EB2F165667C5UL; private const ulong Prime64_5 = 0x27D4EB2F165667C5UL;
private static readonly ulong[] _xxh3InitAcc = { private static readonly ulong[] _xxh3InitAcc =
[
Prime32_3, Prime32_3,
Prime64_1, Prime64_1,
Prime64_2, Prime64_2,
@ -39,8 +40,8 @@ namespace Ryujinx.Common
Prime64_4, Prime64_4,
Prime32_2, Prime32_2,
Prime64_5, Prime64_5,
Prime32_1, Prime32_1
}; ];
private static ReadOnlySpan<byte> Xxh3KSecret => new byte[] private static ReadOnlySpan<byte> Xxh3KSecret => new byte[]
{ {

View file

@ -230,7 +230,7 @@ namespace Ryujinx.Cpu.AppleHv
{ {
if (size == 0) if (size == 0)
{ {
return Enumerable.Empty<HostMemoryRange>(); return [];
} }
var guestRegions = GetPhysicalRegionsImpl(va, size); var guestRegions = GetPhysicalRegionsImpl(va, size);
@ -256,7 +256,7 @@ namespace Ryujinx.Cpu.AppleHv
{ {
if (size == 0) if (size == 0)
{ {
return Enumerable.Empty<MemoryRange>(); return [];
} }
return GetPhysicalRegionsImpl(va, size); return GetPhysicalRegionsImpl(va, size);

View file

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

View file

@ -250,7 +250,7 @@ namespace Ryujinx.Cpu.Jit
{ {
if (size == 0) if (size == 0)
{ {
return Enumerable.Empty<HostMemoryRange>(); return [];
} }
var guestRegions = GetPhysicalRegionsImpl(va, size); var guestRegions = GetPhysicalRegionsImpl(va, size);
@ -276,7 +276,7 @@ namespace Ryujinx.Cpu.Jit
{ {
if (size == 0) if (size == 0)
{ {
return Enumerable.Empty<MemoryRange>(); return [];
} }
return GetPhysicalRegionsImpl(va, size); return GetPhysicalRegionsImpl(va, size);

View file

@ -263,7 +263,7 @@ namespace Ryujinx.Cpu.Jit
{ {
if (size == 0) if (size == 0)
{ {
return ReadOnlySpan<byte>.Empty; return [];
} }
if (tracked) if (tracked)
@ -469,7 +469,7 @@ namespace Ryujinx.Cpu.Jit
{ {
if (size == 0) if (size == 0)
{ {
return Enumerable.Empty<MemoryRange>(); return [];
} }
return GetPhysicalRegionsImpl(va, size); return GetPhysicalRegionsImpl(va, size);

View file

@ -36,7 +36,7 @@ namespace Ryujinx.Cpu.LightningJit.Arm32
RegisterAllocator = registerAllocator; RegisterAllocator = registerAllocator;
MemoryManagerType = mmType; MemoryManagerType = mmType;
_itConditions = new ArmCondition[4]; _itConditions = new ArmCondition[4];
_pendingBranches = new(); _pendingBranches = [];
IsThumb = isThumb; 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) public static MultiBlock DecodeMulti(CpuPreset cpuPreset, IMemoryManager memoryManager, ulong address, bool isThumb)
{ {
List<Block> blocks = new(); List<Block> blocks = [];
List<ulong> branchTargets = new(); List<ulong> branchTargets = [];
while (true) while (true)
{ {
@ -202,7 +202,7 @@ namespace Ryujinx.Cpu.LightningJit.Arm32
{ {
ulong startAddress = address; ulong startAddress = address;
List<InstInfo> insts = new(); List<InstInfo> insts = [];
uint encoding; uint encoding;
InstMeta meta; InstMeta meta;

View file

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

View file

@ -9,48 +9,49 @@ namespace Ryujinx.Cpu.LightningJit.Arm32
static InstTableT16() static InstTableT16()
{ {
InstEncoding[] rmRdndnConstraints = new InstEncoding[] InstEncoding[] rmRdndnConstraints =
{ [
new(0x00680000, 0x00780000), new(0x00680000, 0x00780000),
new(0x00850000, 0x00870000), new(0x00850000, 0x00870000)
}; ];
InstEncoding[] rmConstraints = new InstEncoding[] InstEncoding[] rmConstraints =
{ [
new(0x00680000, 0x00780000), new(0x00680000, 0x00780000)
}; ];
InstEncoding[] condCondConstraints = new InstEncoding[] InstEncoding[] condCondConstraints =
{ [
new(0x0E000000, 0x0F000000), new(0x0E000000, 0x0F000000),
new(0x0F000000, 0x0F000000), new(0x0F000000, 0x0F000000)
}; ];
InstEncoding[] maskConstraints = new InstEncoding[] InstEncoding[] maskConstraints =
{ [
new(0x00000000, 0x000F0000), new(0x00000000, 0x000F0000)
}; ];
InstEncoding[] opConstraints = new InstEncoding[] InstEncoding[] opConstraints =
{ [
new(0x18000000, 0x18000000), new(0x18000000, 0x18000000)
}; ];
InstEncoding[] opOpOpOpConstraints = new InstEncoding[] InstEncoding[] opOpOpOpConstraints =
{ [
new(0x00000000, 0x03C00000), new(0x00000000, 0x03C00000),
new(0x00400000, 0x03C00000), new(0x00400000, 0x03C00000),
new(0x01400000, 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(0x41400000, 0xFFC00000, InstName.AdcR, T.AdcRT1, IsaVersion.v80, InstFlags.Rdn),
new(0x1C000000, 0xFE000000, InstName.AddI, T.AddIT1, IsaVersion.v80, InstFlags.Rd), new(0x1C000000, 0xFE000000, InstName.AddI, T.AddIT1, IsaVersion.v80, InstFlags.Rd),
new(0x30000000, 0xF8000000, InstName.AddI, T.AddIT2, IsaVersion.v80, InstFlags.Rdn), new(0x30000000, 0xF8000000, InstName.AddI, T.AddIT2, IsaVersion.v80, InstFlags.Rdn),
new(0x18000000, 0xFE000000, InstName.AddR, T.AddRT1, IsaVersion.v80, InstFlags.Rd), 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(0xA8000000, 0xF8000000, InstName.AddSpI, T.AddSpIT1, IsaVersion.v80, InstFlags.RdRd16),
new(0xB0000000, 0xFF800000, InstName.AddSpI, T.AddSpIT2, IsaVersion.v80, InstFlags.None), new(0xB0000000, 0xFF800000, InstName.AddSpI, T.AddSpIT2, IsaVersion.v80, InstFlags.None),
new(0x44680000, 0xFF780000, InstName.AddSpR, T.AddSpRT1, 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(0x20000000, 0xF8000000, InstName.MovI, T.MovIT1, IsaVersion.v80, InstFlags.RdRd16),
new(0x46000000, 0xFF000000, InstName.MovR, T.MovRT1, IsaVersion.v80, InstFlags.Rd), new(0x46000000, 0xFF000000, InstName.MovR, T.MovRT1, IsaVersion.v80, InstFlags.Rd),
new(0x00000000, 0xE0000000, opConstraints, InstName.MovR, T.MovRT2, 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(0x43400000, 0xFFC00000, InstName.Mul, T.MulT1, IsaVersion.v80, InstFlags.None),
new(0x43C00000, 0xFFC00000, InstName.MvnR, T.MvnRT1, IsaVersion.v80, InstFlags.Rd), new(0x43C00000, 0xFFC00000, InstName.MvnR, T.MvnRT1, IsaVersion.v80, InstFlags.Rd),
new(0xBF000000, 0xFFFF0000, InstName.Nop, T.NopT1, IsaVersion.v80, InstFlags.None), 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(0x42400000, 0xFFC00000, InstName.RsbI, T.RsbIT1, IsaVersion.v80, InstFlags.Rd),
new(0x41800000, 0xFFC00000, InstName.SbcR, T.SbcRT1, IsaVersion.v80, InstFlags.Rdn), new(0x41800000, 0xFFC00000, InstName.SbcR, T.SbcRT1, IsaVersion.v80, InstFlags.Rdn),
new(0xB6500000, 0xFFF70000, InstName.Setend, T.SetendT1, IsaVersion.v80, InstFlags.None), 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(0xBF400000, 0xFFFF0000, InstName.Sev, T.SevT1, IsaVersion.v80, InstFlags.None),
new(0xBF500000, 0xFFFF0000, InstName.Sevl, T.SevlT1, 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), 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(0xB2800000, 0xFFC00000, InstName.Uxth, T.UxthT1, IsaVersion.v80, InstFlags.Rd),
new(0xBF200000, 0xFFFF0000, InstName.Wfe, T.WfeT1, IsaVersion.v80, InstFlags.None), new(0xBF200000, 0xFFFF0000, InstName.Wfe, T.WfeT1, IsaVersion.v80, InstFlags.None),
new(0xBF300000, 0xFFFF0000, InstName.Wfi, T.WfiT1, 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); _table = new(insts);
} }

View file

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

View file

@ -230,7 +230,7 @@ namespace Ryujinx.Cpu.LightningJit.Arm32.Target.Arm64
{ {
MultiBlock multiBlock = Decoder<InstEmit>.DecodeMulti(cpuPreset, memoryManager, address, isThumb); MultiBlock multiBlock = Decoder<InstEmit>.DecodeMulti(cpuPreset, memoryManager, address, isThumb);
Dictionary<ulong, int> targets = new(); Dictionary<ulong, int> targets = [];
CodeWriter writer = new(); CodeWriter writer = new();
RegisterAllocator regAlloc = new(); RegisterAllocator regAlloc = new();

View file

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

View file

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

View file

@ -308,8 +308,8 @@ namespace Ryujinx.Cpu.LightningJit.Arm64.Target.Arm64
{ {
MultiBlock multiBlock = Decoder.DecodeMulti(cpuPreset, memoryManager, address); MultiBlock multiBlock = Decoder.DecodeMulti(cpuPreset, memoryManager, address);
Dictionary<ulong, int> targets = new(); Dictionary<ulong, int> targets = [];
List<PendingBranch> pendingBranches = new(); List<PendingBranch> pendingBranches = [];
uint gprUseMask = multiBlock.GlobalUseMask.GprMask; uint gprUseMask = multiBlock.GlobalUseMask.GprMask;
uint fpSimdUseMask = multiBlock.GlobalUseMask.FpSimdMask; 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) public static MultiBlock DecodeMulti(CpuPreset cpuPreset, IMemoryManager memoryManager, ulong address)
{ {
List<Block> blocks = new(); List<Block> blocks = [];
List<ulong> branchTargets = new(); List<ulong> branchTargets = [];
RegisterMask useMask = RegisterMask.Zero; RegisterMask useMask = RegisterMask.Zero;
@ -137,7 +137,7 @@ namespace Ryujinx.Cpu.LightningJit.Arm64.Target.Arm64
private static void NumberAndLinkBlocks(List<Block> blocks) private static void NumberAndLinkBlocks(List<Block> blocks)
{ {
Dictionary<ulong, Block> blocksByAddress = new(); Dictionary<ulong, Block> blocksByAddress = [];
for (int blockIndex = 0; blockIndex < blocks.Count; blockIndex++) for (int blockIndex = 0; blockIndex < blocks.Count; blockIndex++)
{ {
@ -238,7 +238,7 @@ namespace Ryujinx.Cpu.LightningJit.Arm64.Target.Arm64
{ {
ulong startAddress = address; ulong startAddress = address;
List<InstInfo> insts = new(); List<InstInfo> insts = [];
uint gprUseMask = useMask.GprMask; uint gprUseMask = useMask.GprMask;
uint fpSimdUseMask = useMask.FpSimdMask; uint fpSimdUseMask = useMask.FpSimdMask;

View file

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

View file

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

View file

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

View file

@ -190,7 +190,7 @@ namespace Ryujinx.Cpu.LightningJit.Cache
private bool TryGetThreadLocalFunction(ulong guestAddress, out IntPtr funcPtr) private bool TryGetThreadLocalFunction(ulong guestAddress, out IntPtr funcPtr)
{ {
if ((_threadLocalCache ??= new()).TryGetValue(guestAddress, out var entry)) if ((_threadLocalCache ??= []).TryGetValue(guestAddress, out var entry))
{ {
if (entry.IncrementUseCount() >= MinCallsForPad) if (entry.IncrementUseCount() >= MinCallsForPad)
{ {
@ -231,7 +231,7 @@ namespace Ryujinx.Cpu.LightningJit.Cache
_sharedCache.Pointer, _sharedCache.Pointer,
SharedCacheSize); SharedCacheSize);
List<(ulong, ThreadLocalCacheEntry)> toDelete = new(); List<(ulong, ThreadLocalCacheEntry)> toDelete = [];
foreach ((ulong address, ThreadLocalCacheEntry entry) in _threadLocalCache) foreach ((ulong address, ThreadLocalCacheEntry entry) in _threadLocalCache)
{ {
@ -306,7 +306,7 @@ namespace Ryujinx.Cpu.LightningJit.Cache
IntPtr funcPtr = _localCache.Pointer + funcOffset; IntPtr funcPtr = _localCache.Pointer + funcOffset;
code.CopyTo(new Span<byte>((void*)funcPtr, code.Length)); code.CopyTo(new Span<byte>((void*)funcPtr, code.Length));
(_threadLocalCache ??= new()).Add(guestAddress, new(funcOffset, code.Length, funcPtr)); (_threadLocalCache ??= []).Add(guestAddress, new(funcOffset, code.Length, funcPtr));
_localCache.ReprotectAsRx(funcOffset, alignedSize); _localCache.ReprotectAsRx(funcOffset, alignedSize);

View file

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

View file

@ -26,7 +26,7 @@ namespace Ryujinx.Cpu.LightningJit.CodeGen.Arm64
public Assembler(CodeWriter writer) public Assembler(CodeWriter writer)
{ {
_code = writer.GetList(); _code = writer.GetList();
_labels = new List<LabelState>(); _labels = [];
} }
public readonly Operand CreateLabel() public readonly Operand CreateLabel()

View file

@ -8,7 +8,7 @@ namespace Ryujinx.Cpu.LightningJit.CodeGen.Arm64
{ {
public IEnumerable<ulong> GetCallStack(IntPtr framePointer, IntPtr codeRegionStart, int codeRegionSize, IntPtr codeRegion2Start, int codeRegion2Size) public IEnumerable<ulong> GetCallStack(IntPtr framePointer, IntPtr codeRegionStart, int codeRegionSize, IntPtr codeRegion2Start, int codeRegion2Size)
{ {
List<ulong> functionPointers = new(); List<ulong> functionPointers = [];
while (true) while (true)
{ {

View file

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

View file

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

View file

@ -34,7 +34,7 @@ namespace Ryujinx.Cpu.LightningJit.Table
{ {
int splitIndex = (int)((insts[index].Encoding >> _shift) & _mask); int splitIndex = (int)((insts[index].Encoding >> _shift) & _mask);
(splitList[splitIndex] ??= new()).Add(insts[index]); (splitList[splitIndex] ??= []).Add(insts[index]);
} }
for (int index = 0; index < count; index++) for (int index = 0; index < count; index++)

View file

@ -20,23 +20,21 @@ namespace Ryujinx.Cpu.LightningJit
private static bool IsNoWxPlatform => false; private static bool IsNoWxPlatform => false;
private static readonly AddressTable<ulong>.Level[] _levels64Bit = private static readonly AddressTable<ulong>.Level[] _levels64Bit =
new AddressTable<ulong>.Level[] [
{
new(31, 17), new(31, 17),
new(23, 8), new(23, 8),
new(15, 8), new(15, 8),
new(7, 8), new(7, 8),
new( 2, 5), new(2, 5)
}; ];
private static readonly AddressTable<ulong>.Level[] _levels32Bit = private static readonly AddressTable<ulong>.Level[] _levels32Bit =
new AddressTable<ulong>.Level[] [
{
new(23, 9), new(23, 9),
new(15, 8), new(15, 8),
new(7, 8), new(7, 8),
new( 1, 6), new(1, 6)
}; ];
private readonly ConcurrentQueue<KeyValuePair<ulong, TranslatedFunction>> _oldFuncs; private readonly ConcurrentQueue<KeyValuePair<ulong, TranslatedFunction>> _oldFuncs;
private readonly NoWxCache _noWxCache; private readonly NoWxCache _noWxCache;
@ -153,7 +151,7 @@ namespace Ryujinx.Cpu.LightningJit
public void InvalidateJitCacheRegion(ulong address, ulong size) public void InvalidateJitCacheRegion(ulong address, ulong size)
{ {
ulong[] overlapAddresses = Array.Empty<ulong>(); ulong[] overlapAddresses = [];
int overlapsCount = Functions.GetOverlaps(address, size, ref overlapAddresses); int overlapsCount = Functions.GetOverlaps(address, size, ref overlapAddresses);

View file

@ -140,7 +140,7 @@ namespace Ryujinx.Cpu.LightningJit
/// <returns>Generated <see cref="DispatchStub"/></returns> /// <returns>Generated <see cref="DispatchStub"/></returns>
private IntPtr GenerateDispatchStub() private IntPtr GenerateDispatchStub()
{ {
List<int> branchToFallbackOffsets = new(); List<int> branchToFallbackOffsets = [];
CodeWriter writer = new(); CodeWriter writer = new();

View file

@ -38,10 +38,10 @@ namespace Ryujinx.Cpu
{ {
Memory = memory; Memory = memory;
Size = size; Size = size;
_freeRanges = new List<Range> _freeRanges =
{ [
new Range(0, size), new Range(0, size)
}; ];
} }
public ulong Allocate(ulong size, ulong alignment) public ulong Allocate(ulong size, ulong alignment)
@ -185,7 +185,7 @@ namespace Ryujinx.Cpu
public PrivateMemoryAllocatorImpl(ulong blockAlignment, MemoryAllocationFlags allocationFlags) public PrivateMemoryAllocatorImpl(ulong blockAlignment, MemoryAllocationFlags allocationFlags)
{ {
_blocks = new List<T>(); _blocks = [];
_blockAlignment = blockAlignment; _blockAlignment = blockAlignment;
_allocationFlags = allocationFlags; _allocationFlags = allocationFlags;
} }

View file

@ -28,7 +28,7 @@ namespace Ryujinx.Graphics.Device
if (debugLogCallback != null) if (debugLogCallback != null)
{ {
_fieldNamesForDebug = new Dictionary<uint, string>(); _fieldNamesForDebug = [];
_debugLogCallback = debugLogCallback; _debugLogCallback = debugLogCallback;
} }

View file

@ -15,8 +15,8 @@ namespace Ryujinx.Graphics.GAL.Multithreading
{ {
private ulong _bufferHandle = 0; private ulong _bufferHandle = 0;
private readonly Dictionary<BufferHandle, BufferHandle> _bufferMap = new(); private readonly Dictionary<BufferHandle, BufferHandle> _bufferMap = [];
private readonly HashSet<BufferHandle> _inFlight = new(); private readonly HashSet<BufferHandle> _inFlight = [];
private readonly AutoResetEvent _inFlightChanged = new(false); private readonly AutoResetEvent _inFlightChanged = new(false);
internal BufferHandle CreateBufferHandle() internal BufferHandle CreateBufferHandle()

View file

@ -22,7 +22,7 @@ namespace Ryujinx.Graphics.GAL.Multithreading.Resources
_renderer = renderer; _renderer = renderer;
_toCompile = new Queue<IProgramRequest>(); _toCompile = new Queue<IProgramRequest>();
_inProgress = new List<ThreadedProgram>(); _inProgress = [];
} }
public void Add(IProgramRequest request) public void Add(IProgramRequest request)

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