Merge branch 'master' into xeyes
This commit is contained in:
@@ -13,7 +13,7 @@ namespace ARMeilleure.CodeGen.Arm64
|
||||
|
||||
public static void RunPass(ControlFlowGraph cfg)
|
||||
{
|
||||
Dictionary<ulong, Operand> constants = new Dictionary<ulong, Operand>();
|
||||
Dictionary<ulong, Operand> constants = new();
|
||||
|
||||
Operand GetConstantCopy(BasicBlock block, Operation operation, Operand source)
|
||||
{
|
||||
|
||||
@@ -42,7 +42,7 @@ namespace ARMeilleure.CodeGen.Arm64
|
||||
{
|
||||
Offset = offset;
|
||||
Symbol = symbol;
|
||||
LdrOffsets = new List<(Operand, int)>();
|
||||
LdrOffsets = [];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -266,7 +266,7 @@ namespace ARMeilleure.CodeGen.Arm64
|
||||
}
|
||||
else
|
||||
{
|
||||
relocInfo = new RelocInfo(Array.Empty<RelocEntry>());
|
||||
relocInfo = new RelocInfo([]);
|
||||
}
|
||||
|
||||
return (code, relocInfo);
|
||||
|
||||
@@ -1079,7 +1079,7 @@ namespace ARMeilleure.CodeGen.Arm64
|
||||
|
||||
private static UnwindInfo WritePrologue(CodeGenContext context)
|
||||
{
|
||||
List<UnwindPushEntry> pushEntries = new();
|
||||
List<UnwindPushEntry> pushEntries = [];
|
||||
|
||||
Operand rsp = Register(SpRegister);
|
||||
|
||||
|
||||
@@ -140,8 +140,8 @@ namespace ARMeilleure.CodeGen.Arm64
|
||||
return false;
|
||||
}
|
||||
|
||||
private static readonly string[] _sysctlNames = new string[]
|
||||
{
|
||||
private static readonly string[] _sysctlNames =
|
||||
[
|
||||
"hw.optional.floatingpoint",
|
||||
"hw.optional.AdvSIMD",
|
||||
"hw.optional.arm.FEAT_FP16",
|
||||
@@ -150,8 +150,8 @@ namespace ARMeilleure.CodeGen.Arm64
|
||||
"hw.optional.arm.FEAT_LSE",
|
||||
"hw.optional.armv8_crc32",
|
||||
"hw.optional.arm.FEAT_SHA1",
|
||||
"hw.optional.arm.FEAT_SHA256",
|
||||
};
|
||||
"hw.optional.arm.FEAT_SHA256"
|
||||
];
|
||||
|
||||
[Flags]
|
||||
public enum MacOsFeatureFlags
|
||||
|
||||
@@ -261,10 +261,10 @@ namespace ARMeilleure.CodeGen.Arm64
|
||||
|
||||
Operand dest = operation.Destination;
|
||||
|
||||
List<Operand> sources = new()
|
||||
{
|
||||
operation.GetSource(0),
|
||||
};
|
||||
List<Operand> sources =
|
||||
[
|
||||
operation.GetSource(0)
|
||||
];
|
||||
|
||||
int argsCount = operation.SourcesCount - 1;
|
||||
|
||||
@@ -365,10 +365,10 @@ namespace ARMeilleure.CodeGen.Arm64
|
||||
Operation node,
|
||||
Operation operation)
|
||||
{
|
||||
List<Operand> sources = new()
|
||||
{
|
||||
operation.GetSource(0),
|
||||
};
|
||||
List<Operand> sources =
|
||||
[
|
||||
operation.GetSource(0)
|
||||
];
|
||||
|
||||
int argsCount = operation.SourcesCount - 1;
|
||||
|
||||
@@ -468,8 +468,8 @@ namespace ARMeilleure.CodeGen.Arm64
|
||||
|
||||
// Update the sources and destinations with split 64-bit halfs of the whole 128-bit values.
|
||||
// We also need a additional registers that will be used to store temporary information.
|
||||
operation.SetDestinations(new[] { actualLow, actualHigh, Local(OperandType.I64), Local(OperandType.I64) });
|
||||
operation.SetSources(new[] { address, expectedLow, expectedHigh, desiredLow, desiredHigh });
|
||||
operation.SetDestinations([actualLow, actualHigh, Local(OperandType.I64), Local(OperandType.I64)]);
|
||||
operation.SetSources([address, expectedLow, expectedHigh, desiredLow, desiredHigh]);
|
||||
|
||||
// Add some dummy uses of the input operands, as the CAS operation will be a loop,
|
||||
// so they can't be used as destination operand.
|
||||
@@ -486,7 +486,7 @@ namespace ARMeilleure.CodeGen.Arm64
|
||||
else
|
||||
{
|
||||
// We need a additional register where the store result will be written to.
|
||||
node.SetDestinations(new[] { node.Destination, Local(OperandType.I32) });
|
||||
node.SetDestinations([node.Destination, Local(OperandType.I32)]);
|
||||
|
||||
// Add some dummy uses of the input operands, as the CAS operation will be a loop,
|
||||
// so they can't be used as destination operand.
|
||||
|
||||
@@ -10,7 +10,7 @@ namespace ARMeilleure.CodeGen.Linking
|
||||
/// <summary>
|
||||
/// Gets an empty <see cref="RelocInfo"/>.
|
||||
/// </summary>
|
||||
public static RelocInfo Empty { get; } = new RelocInfo(null);
|
||||
public static RelocInfo Empty { get; } = new(null);
|
||||
|
||||
private readonly RelocEntry[] _entries;
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@ namespace ARMeilleure.CodeGen.RegisterAllocators
|
||||
|
||||
public ParallelCopy()
|
||||
{
|
||||
_copies = new List<Copy>();
|
||||
_copies = [];
|
||||
}
|
||||
|
||||
public void AddCopy(Register dest, Register source, OperandType type)
|
||||
@@ -218,7 +218,7 @@ namespace ARMeilleure.CodeGen.RegisterAllocators
|
||||
|
||||
public Operation[] Sequence()
|
||||
{
|
||||
List<Operation> sequence = new();
|
||||
List<Operation> sequence = [];
|
||||
|
||||
if (_spillQueue != null)
|
||||
{
|
||||
|
||||
@@ -115,7 +115,7 @@ namespace ARMeilleure.CodeGen.RegisterAllocators
|
||||
{
|
||||
NumberLocals(cfg, regMasks.RegistersCount);
|
||||
|
||||
AllocationContext context = new AllocationContext(stackAlloc, regMasks, _intervals.Count);
|
||||
AllocationContext context = new(stackAlloc, regMasks, _intervals.Count);
|
||||
|
||||
BuildIntervals(cfg, context);
|
||||
|
||||
@@ -799,8 +799,8 @@ namespace ARMeilleure.CodeGen.RegisterAllocators
|
||||
|
||||
private void NumberLocals(ControlFlowGraph cfg, int registersCount)
|
||||
{
|
||||
_operationNodes = new List<(IntrusiveList<Operation>, Operation)>();
|
||||
_intervals = new List<LiveInterval>();
|
||||
_operationNodes = [];
|
||||
_intervals = [];
|
||||
|
||||
for (int index = 0; index < registersCount; index++)
|
||||
{
|
||||
@@ -839,7 +839,7 @@ namespace ARMeilleure.CodeGen.RegisterAllocators
|
||||
{
|
||||
dest.NumberLocal(_intervals.Count);
|
||||
|
||||
LiveInterval interval = new LiveInterval(dest);
|
||||
LiveInterval interval = new(dest);
|
||||
_intervals.Add(interval);
|
||||
|
||||
SetVisited(dest);
|
||||
@@ -980,7 +980,7 @@ namespace ARMeilleure.CodeGen.RegisterAllocators
|
||||
|
||||
_blockLiveIn = blkLiveIn;
|
||||
|
||||
_blockEdges = new HashSet<int>();
|
||||
_blockEdges = [];
|
||||
|
||||
// Compute lifetime intervals.
|
||||
int operationPos = _operationsCount;
|
||||
|
||||
@@ -75,9 +75,9 @@ namespace ARMeilleure.CodeGen.X86
|
||||
{
|
||||
_stream = stream;
|
||||
_labels = new Dictionary<Operand, long>();
|
||||
_jumps = new List<Jump>();
|
||||
_jumps = [];
|
||||
|
||||
_relocs = relocatable ? new List<Reloc>() : null;
|
||||
_relocs = relocatable ? [] : null;
|
||||
}
|
||||
|
||||
public void MarkLabel(Operand label)
|
||||
@@ -1412,14 +1412,14 @@ namespace ARMeilleure.CodeGen.X86
|
||||
_stream.Seek(0, SeekOrigin.Begin);
|
||||
|
||||
using RecyclableMemoryStream codeStream = MemoryStreamManager.Shared.GetStream();
|
||||
Assembler assembler = new Assembler(codeStream, HasRelocs);
|
||||
Assembler assembler = new(codeStream, HasRelocs);
|
||||
|
||||
bool hasRelocs = HasRelocs;
|
||||
int relocIndex = 0;
|
||||
int relocOffset = 0;
|
||||
RelocEntry[] relocEntries = hasRelocs
|
||||
? new RelocEntry[relocs.Length]
|
||||
: Array.Empty<RelocEntry>();
|
||||
: [];
|
||||
|
||||
for (int i = 0; i < jumps.Length; i++)
|
||||
{
|
||||
@@ -1471,7 +1471,7 @@ namespace ARMeilleure.CodeGen.X86
|
||||
_stream.CopyTo(codeStream);
|
||||
|
||||
byte[] code = codeStream.ToArray();
|
||||
RelocInfo relocInfo = new RelocInfo(relocEntries);
|
||||
RelocInfo relocInfo = new(relocEntries);
|
||||
|
||||
return (code, relocInfo);
|
||||
}
|
||||
|
||||
@@ -1748,7 +1748,7 @@ namespace ARMeilleure.CodeGen.X86
|
||||
|
||||
private static UnwindInfo WritePrologue(CodeGenContext context)
|
||||
{
|
||||
List<UnwindPushEntry> pushEntries = new();
|
||||
List<UnwindPushEntry> pushEntries = [];
|
||||
|
||||
Operand rsp = Register(X86Register.Rsp);
|
||||
|
||||
|
||||
@@ -40,12 +40,12 @@ namespace ARMeilleure.CodeGen.X86
|
||||
return 0;
|
||||
}
|
||||
|
||||
ReadOnlySpan<byte> asmGetXcr0 = new byte[]
|
||||
{
|
||||
ReadOnlySpan<byte> asmGetXcr0 =
|
||||
[
|
||||
0x31, 0xc9, // xor ecx, ecx
|
||||
0xf, 0x01, 0xd0, // xgetbv
|
||||
0xc3, // ret
|
||||
};
|
||||
0xc3 // ret
|
||||
];
|
||||
|
||||
using MemoryBlock memGetXcr0 = new((ulong)asmGetXcr0.Length);
|
||||
|
||||
|
||||
@@ -124,13 +124,13 @@ namespace ARMeilleure.CodeGen.X86
|
||||
{
|
||||
int stackOffset = stackAlloc.Allocate(OperandType.I32);
|
||||
|
||||
node.SetSources(new Operand[] { Const(stackOffset), node.GetSource(0) });
|
||||
node.SetSources([Const(stackOffset), node.GetSource(0)]);
|
||||
}
|
||||
else if (node.Intrinsic == Intrinsic.X86Stmxcsr)
|
||||
{
|
||||
int stackOffset = stackAlloc.Allocate(OperandType.I32);
|
||||
|
||||
node.SetSources(new Operand[] { Const(stackOffset) });
|
||||
node.SetSources([Const(stackOffset)]);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -253,8 +253,8 @@ namespace ARMeilleure.CodeGen.X86
|
||||
node = nodes.AddAfter(node, Operation(Instruction.VectorCreateScalar, dest, rax));
|
||||
nodes.AddAfter(node, Operation(Instruction.VectorInsert, dest, dest, rdx, Const(1)));
|
||||
|
||||
operation.SetDestinations(new Operand[] { rdx, rax });
|
||||
operation.SetSources(new Operand[] { operation.GetSource(0), rdx, rax, rcx, rbx });
|
||||
operation.SetDestinations([rdx, rax]);
|
||||
operation.SetSources([operation.GetSource(0), rdx, rax, rcx, rbx]);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -274,7 +274,7 @@ namespace ARMeilleure.CodeGen.X86
|
||||
|
||||
nodes.AddBefore(node, Operation(Instruction.Copy, temp, newValue));
|
||||
|
||||
node.SetSources(new Operand[] { node.GetSource(0), rax, temp });
|
||||
node.SetSources([node.GetSource(0), rax, temp]);
|
||||
|
||||
nodes.AddAfter(node, Operation(Instruction.Copy, dest, rax));
|
||||
|
||||
@@ -303,7 +303,7 @@ namespace ARMeilleure.CodeGen.X86
|
||||
|
||||
nodes.AddAfter(node, Operation(Instruction.Copy, dest, rax));
|
||||
|
||||
node.SetSources(new Operand[] { rdx, rax, node.GetSource(1) });
|
||||
node.SetSources([rdx, rax, node.GetSource(1)]);
|
||||
node.Destination = rax;
|
||||
}
|
||||
|
||||
@@ -348,7 +348,7 @@ namespace ARMeilleure.CodeGen.X86
|
||||
|
||||
nodes.AddAfter(node, Operation(Instruction.Copy, dest, rdx));
|
||||
|
||||
node.SetDestinations(new Operand[] { rdx, rax });
|
||||
node.SetDestinations([rdx, rax]);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -14,10 +14,10 @@ namespace ARMeilleure.CodeGen.X86
|
||||
{
|
||||
Operand dest = node.Destination;
|
||||
|
||||
List<Operand> sources = new()
|
||||
{
|
||||
node.GetSource(0),
|
||||
};
|
||||
List<Operand> sources =
|
||||
[
|
||||
node.GetSource(0)
|
||||
];
|
||||
|
||||
int argsCount = node.SourcesCount - 1;
|
||||
|
||||
@@ -117,10 +117,10 @@ namespace ARMeilleure.CodeGen.X86
|
||||
|
||||
public static void InsertTailcallCopies(IntrusiveList<Operation> nodes, Operation node)
|
||||
{
|
||||
List<Operand> sources = new()
|
||||
{
|
||||
node.GetSource(0),
|
||||
};
|
||||
List<Operand> sources =
|
||||
[
|
||||
node.GetSource(0)
|
||||
];
|
||||
|
||||
int argsCount = node.SourcesCount - 1;
|
||||
|
||||
|
||||
@@ -321,7 +321,7 @@ namespace ARMeilleure.CodeGen.X86
|
||||
nodes.AddBefore(node, retCopyOp);
|
||||
}
|
||||
|
||||
node.SetSources(Array.Empty<Operand>());
|
||||
node.SetSources([]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ namespace ARMeilleure.CodeGen.X86
|
||||
|
||||
public static void RunPass(ControlFlowGraph cfg)
|
||||
{
|
||||
Dictionary<ulong, Operand> constants = new Dictionary<ulong, Operand>();
|
||||
Dictionary<ulong, Operand> constants = new();
|
||||
|
||||
Operand GetConstantCopy(BasicBlock block, Operation operation, Operand source)
|
||||
{
|
||||
|
||||
@@ -3,52 +3,46 @@ namespace ARMeilleure.Common
|
||||
public static class AddressTablePresets
|
||||
{
|
||||
private static readonly AddressTableLevel[] _levels64Bit =
|
||||
new AddressTableLevel[]
|
||||
{
|
||||
new(31, 17),
|
||||
[
|
||||
new(31, 17),
|
||||
new(23, 8),
|
||||
new(15, 8),
|
||||
new( 7, 8),
|
||||
new( 2, 5),
|
||||
};
|
||||
new( 2, 5)
|
||||
];
|
||||
|
||||
private static readonly AddressTableLevel[] _levels32Bit =
|
||||
new AddressTableLevel[]
|
||||
{
|
||||
new(31, 17),
|
||||
[
|
||||
new(31, 17),
|
||||
new(23, 8),
|
||||
new(15, 8),
|
||||
new( 7, 8),
|
||||
new( 1, 6),
|
||||
};
|
||||
new( 1, 6)
|
||||
];
|
||||
|
||||
private static readonly AddressTableLevel[] _levels64BitSparseTiny =
|
||||
new AddressTableLevel[]
|
||||
{
|
||||
new( 11, 28),
|
||||
new( 2, 9),
|
||||
};
|
||||
[
|
||||
new( 11, 28),
|
||||
new( 2, 9)
|
||||
];
|
||||
|
||||
private static readonly AddressTableLevel[] _levels32BitSparseTiny =
|
||||
new AddressTableLevel[]
|
||||
{
|
||||
new( 10, 22),
|
||||
new( 1, 9),
|
||||
};
|
||||
[
|
||||
new( 10, 22),
|
||||
new( 1, 9)
|
||||
];
|
||||
|
||||
private static readonly AddressTableLevel[] _levels64BitSparseGiant =
|
||||
new AddressTableLevel[]
|
||||
{
|
||||
new( 38, 1),
|
||||
new( 2, 36),
|
||||
};
|
||||
[
|
||||
new( 38, 1),
|
||||
new( 2, 36)
|
||||
];
|
||||
|
||||
private static readonly AddressTableLevel[] _levels32BitSparseGiant =
|
||||
new AddressTableLevel[]
|
||||
{
|
||||
new( 31, 1),
|
||||
new( 1, 30),
|
||||
};
|
||||
[
|
||||
new( 31, 1),
|
||||
new( 1, 30)
|
||||
];
|
||||
|
||||
//high power will run worse on DDR3 systems and some DDR4 systems due to the higher ram utilization
|
||||
//low power will never run worse than non-sparse, but for most systems it won't be necessary
|
||||
|
||||
@@ -130,12 +130,12 @@ namespace ARMeilleure.Common
|
||||
if (count > _count)
|
||||
{
|
||||
long* oldMask = _masks;
|
||||
Span<long> oldSpan = new Span<long>(_masks, _count);
|
||||
Span<long> oldSpan = new(_masks, _count);
|
||||
|
||||
_masks = _allocator.Allocate<long>((uint)count);
|
||||
_count = count;
|
||||
|
||||
Span<long> newSpan = new Span<long>(_masks, _count);
|
||||
Span<long> newSpan = new(_masks, _count);
|
||||
|
||||
oldSpan.CopyTo(newSpan);
|
||||
newSpan[oldSpan.Length..].Clear();
|
||||
|
||||
@@ -5,7 +5,7 @@ namespace ARMeilleure.Common
|
||||
{
|
||||
static class BitUtils
|
||||
{
|
||||
private static ReadOnlySpan<sbyte> HbsNibbleLut => new sbyte[] { -1, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3 };
|
||||
private static ReadOnlySpan<sbyte> HbsNibbleLut => [-1, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3];
|
||||
|
||||
public static long FillWithOnes(int bits)
|
||||
{
|
||||
|
||||
@@ -17,7 +17,7 @@ namespace ARMeilleure.Decoders
|
||||
|
||||
public Block()
|
||||
{
|
||||
OpCodes = new List<OpCode>();
|
||||
OpCodes = [];
|
||||
}
|
||||
|
||||
public Block(ulong address) : this()
|
||||
|
||||
@@ -20,7 +20,7 @@ namespace ARMeilleure.Decoders
|
||||
|
||||
public static Block[] Decode(IMemoryManager memory, ulong address, ExecutionMode mode, bool highCq, DecoderMode dMode)
|
||||
{
|
||||
List<Block> blocks = new();
|
||||
List<Block> blocks = [];
|
||||
|
||||
Queue<Block> workQueue = new();
|
||||
|
||||
|
||||
@@ -5,12 +5,12 @@ namespace ARMeilleure.Decoders
|
||||
class OpCode32SimdMemPair : OpCode32, IOpCode32Simd
|
||||
{
|
||||
private static readonly int[] _regsMap =
|
||||
{
|
||||
[
|
||||
1, 1, 4, 2,
|
||||
1, 1, 3, 1,
|
||||
1, 1, 2, 1,
|
||||
1, 1, 1, 1,
|
||||
};
|
||||
1, 1, 1, 1
|
||||
];
|
||||
|
||||
public int Vd { get; }
|
||||
public int Rn { get; }
|
||||
|
||||
@@ -12,7 +12,7 @@ namespace ARMeilleure.Decoders
|
||||
|
||||
public OpCodeT16IfThen(InstDescriptor inst, ulong address, int opCode) : base(inst, address, opCode)
|
||||
{
|
||||
List<Condition> conds = new();
|
||||
List<Condition> conds = [];
|
||||
|
||||
int cond = (opCode >> 4) & 0xf;
|
||||
int mask = opCode & 0xf;
|
||||
|
||||
@@ -29,9 +29,9 @@ namespace ARMeilleure.Decoders
|
||||
}
|
||||
}
|
||||
|
||||
private static readonly List<InstInfo> _allInstA32 = new();
|
||||
private static readonly List<InstInfo> _allInstT32 = new();
|
||||
private static readonly List<InstInfo> _allInstA64 = new();
|
||||
private static readonly List<InstInfo> _allInstA32 = [];
|
||||
private static readonly List<InstInfo> _allInstT32 = [];
|
||||
private static readonly List<InstInfo> _allInstA64 = [];
|
||||
|
||||
private static readonly InstInfo[][] _instA32FastLookup = new InstInfo[FastLookupSize][];
|
||||
private static readonly InstInfo[][] _instT32FastLookup = new InstInfo[FastLookupSize][];
|
||||
@@ -1330,7 +1330,7 @@ namespace ARMeilleure.Decoders
|
||||
|
||||
for (int index = 0; index < temp.Length; index++)
|
||||
{
|
||||
temp[index] = new List<InstInfo>();
|
||||
temp[index] = [];
|
||||
}
|
||||
|
||||
foreach (InstInfo inst in allInsts)
|
||||
|
||||
@@ -69,7 +69,7 @@ namespace ARMeilleure.Decoders.Optimizations
|
||||
}
|
||||
}
|
||||
|
||||
List<Block> newBlocks = new List<Block>(blocks.Count);
|
||||
List<Block> newBlocks = new(blocks.Count);
|
||||
|
||||
// Finally, rebuild decoded block list, ignoring blocks outside the contiguous range.
|
||||
for (int i = 0; i < blocks.Count; i++)
|
||||
|
||||
@@ -285,7 +285,7 @@ namespace ARMeilleure.Diagnostics
|
||||
|
||||
public static string GetDump(ControlFlowGraph cfg)
|
||||
{
|
||||
IRDumper dumper = new IRDumper(1);
|
||||
IRDumper dumper = new(1);
|
||||
|
||||
for (BasicBlock block = cfg.Blocks.First; block != null; block = block.ListNext)
|
||||
{
|
||||
|
||||
@@ -29,7 +29,7 @@ namespace ARMeilleure.Diagnostics
|
||||
static Symbols()
|
||||
{
|
||||
_symbols = new ConcurrentDictionary<ulong, string>();
|
||||
_rangedSymbols = new List<RangedSymbol>();
|
||||
_rangedSymbols = [];
|
||||
}
|
||||
|
||||
public static string Get(ulong address)
|
||||
|
||||
@@ -9,8 +9,8 @@ namespace ARMeilleure.Instructions
|
||||
{
|
||||
#region "LookUp Tables"
|
||||
#pragma warning disable IDE1006 // Naming rule violation
|
||||
private static ReadOnlySpan<byte> _sBox => new byte[]
|
||||
{
|
||||
private static ReadOnlySpan<byte> _sBox =>
|
||||
[
|
||||
0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76,
|
||||
0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0,
|
||||
0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15,
|
||||
@@ -26,11 +26,11 @@ namespace ARMeilleure.Instructions
|
||||
0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a,
|
||||
0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e,
|
||||
0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf,
|
||||
0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16,
|
||||
};
|
||||
0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16
|
||||
];
|
||||
|
||||
private static ReadOnlySpan<byte> _invSBox => new byte[]
|
||||
{
|
||||
private static ReadOnlySpan<byte> _invSBox =>
|
||||
[
|
||||
0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb,
|
||||
0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb,
|
||||
0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e,
|
||||
@@ -46,11 +46,11 @@ namespace ARMeilleure.Instructions
|
||||
0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f,
|
||||
0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef,
|
||||
0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61,
|
||||
0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d,
|
||||
};
|
||||
0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d
|
||||
];
|
||||
|
||||
private static ReadOnlySpan<byte> _gfMul02 => new byte[]
|
||||
{
|
||||
private static ReadOnlySpan<byte> _gfMul02 =>
|
||||
[
|
||||
0x00, 0x02, 0x04, 0x06, 0x08, 0x0a, 0x0c, 0x0e, 0x10, 0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e,
|
||||
0x20, 0x22, 0x24, 0x26, 0x28, 0x2a, 0x2c, 0x2e, 0x30, 0x32, 0x34, 0x36, 0x38, 0x3a, 0x3c, 0x3e,
|
||||
0x40, 0x42, 0x44, 0x46, 0x48, 0x4a, 0x4c, 0x4e, 0x50, 0x52, 0x54, 0x56, 0x58, 0x5a, 0x5c, 0x5e,
|
||||
@@ -66,11 +66,11 @@ namespace ARMeilleure.Instructions
|
||||
0x9b, 0x99, 0x9f, 0x9d, 0x93, 0x91, 0x97, 0x95, 0x8b, 0x89, 0x8f, 0x8d, 0x83, 0x81, 0x87, 0x85,
|
||||
0xbb, 0xb9, 0xbf, 0xbd, 0xb3, 0xb1, 0xb7, 0xb5, 0xab, 0xa9, 0xaf, 0xad, 0xa3, 0xa1, 0xa7, 0xa5,
|
||||
0xdb, 0xd9, 0xdf, 0xdd, 0xd3, 0xd1, 0xd7, 0xd5, 0xcb, 0xc9, 0xcf, 0xcd, 0xc3, 0xc1, 0xc7, 0xc5,
|
||||
0xfb, 0xf9, 0xff, 0xfd, 0xf3, 0xf1, 0xf7, 0xf5, 0xeb, 0xe9, 0xef, 0xed, 0xe3, 0xe1, 0xe7, 0xe5,
|
||||
};
|
||||
0xfb, 0xf9, 0xff, 0xfd, 0xf3, 0xf1, 0xf7, 0xf5, 0xeb, 0xe9, 0xef, 0xed, 0xe3, 0xe1, 0xe7, 0xe5
|
||||
];
|
||||
|
||||
private static ReadOnlySpan<byte> _gfMul03 => new byte[]
|
||||
{
|
||||
private static ReadOnlySpan<byte> _gfMul03 =>
|
||||
[
|
||||
0x00, 0x03, 0x06, 0x05, 0x0c, 0x0f, 0x0a, 0x09, 0x18, 0x1b, 0x1e, 0x1d, 0x14, 0x17, 0x12, 0x11,
|
||||
0x30, 0x33, 0x36, 0x35, 0x3c, 0x3f, 0x3a, 0x39, 0x28, 0x2b, 0x2e, 0x2d, 0x24, 0x27, 0x22, 0x21,
|
||||
0x60, 0x63, 0x66, 0x65, 0x6c, 0x6f, 0x6a, 0x69, 0x78, 0x7b, 0x7e, 0x7d, 0x74, 0x77, 0x72, 0x71,
|
||||
@@ -86,11 +86,11 @@ namespace ARMeilleure.Instructions
|
||||
0x5b, 0x58, 0x5d, 0x5e, 0x57, 0x54, 0x51, 0x52, 0x43, 0x40, 0x45, 0x46, 0x4f, 0x4c, 0x49, 0x4a,
|
||||
0x6b, 0x68, 0x6d, 0x6e, 0x67, 0x64, 0x61, 0x62, 0x73, 0x70, 0x75, 0x76, 0x7f, 0x7c, 0x79, 0x7a,
|
||||
0x3b, 0x38, 0x3d, 0x3e, 0x37, 0x34, 0x31, 0x32, 0x23, 0x20, 0x25, 0x26, 0x2f, 0x2c, 0x29, 0x2a,
|
||||
0x0b, 0x08, 0x0d, 0x0e, 0x07, 0x04, 0x01, 0x02, 0x13, 0x10, 0x15, 0x16, 0x1f, 0x1c, 0x19, 0x1a,
|
||||
};
|
||||
0x0b, 0x08, 0x0d, 0x0e, 0x07, 0x04, 0x01, 0x02, 0x13, 0x10, 0x15, 0x16, 0x1f, 0x1c, 0x19, 0x1a
|
||||
];
|
||||
|
||||
private static ReadOnlySpan<byte> _gfMul09 => new byte[]
|
||||
{
|
||||
private static ReadOnlySpan<byte> _gfMul09 =>
|
||||
[
|
||||
0x00, 0x09, 0x12, 0x1b, 0x24, 0x2d, 0x36, 0x3f, 0x48, 0x41, 0x5a, 0x53, 0x6c, 0x65, 0x7e, 0x77,
|
||||
0x90, 0x99, 0x82, 0x8b, 0xb4, 0xbd, 0xa6, 0xaf, 0xd8, 0xd1, 0xca, 0xc3, 0xfc, 0xf5, 0xee, 0xe7,
|
||||
0x3b, 0x32, 0x29, 0x20, 0x1f, 0x16, 0x0d, 0x04, 0x73, 0x7a, 0x61, 0x68, 0x57, 0x5e, 0x45, 0x4c,
|
||||
@@ -106,11 +106,11 @@ namespace ARMeilleure.Instructions
|
||||
0x9a, 0x93, 0x88, 0x81, 0xbe, 0xb7, 0xac, 0xa5, 0xd2, 0xdb, 0xc0, 0xc9, 0xf6, 0xff, 0xe4, 0xed,
|
||||
0x0a, 0x03, 0x18, 0x11, 0x2e, 0x27, 0x3c, 0x35, 0x42, 0x4b, 0x50, 0x59, 0x66, 0x6f, 0x74, 0x7d,
|
||||
0xa1, 0xa8, 0xb3, 0xba, 0x85, 0x8c, 0x97, 0x9e, 0xe9, 0xe0, 0xfb, 0xf2, 0xcd, 0xc4, 0xdf, 0xd6,
|
||||
0x31, 0x38, 0x23, 0x2a, 0x15, 0x1c, 0x07, 0x0e, 0x79, 0x70, 0x6b, 0x62, 0x5d, 0x54, 0x4f, 0x46,
|
||||
};
|
||||
0x31, 0x38, 0x23, 0x2a, 0x15, 0x1c, 0x07, 0x0e, 0x79, 0x70, 0x6b, 0x62, 0x5d, 0x54, 0x4f, 0x46
|
||||
];
|
||||
|
||||
private static ReadOnlySpan<byte> _gfMul0B => new byte[]
|
||||
{
|
||||
private static ReadOnlySpan<byte> _gfMul0B =>
|
||||
[
|
||||
0x00, 0x0b, 0x16, 0x1d, 0x2c, 0x27, 0x3a, 0x31, 0x58, 0x53, 0x4e, 0x45, 0x74, 0x7f, 0x62, 0x69,
|
||||
0xb0, 0xbb, 0xa6, 0xad, 0x9c, 0x97, 0x8a, 0x81, 0xe8, 0xe3, 0xfe, 0xf5, 0xc4, 0xcf, 0xd2, 0xd9,
|
||||
0x7b, 0x70, 0x6d, 0x66, 0x57, 0x5c, 0x41, 0x4a, 0x23, 0x28, 0x35, 0x3e, 0x0f, 0x04, 0x19, 0x12,
|
||||
@@ -126,11 +126,11 @@ namespace ARMeilleure.Instructions
|
||||
0x01, 0x0a, 0x17, 0x1c, 0x2d, 0x26, 0x3b, 0x30, 0x59, 0x52, 0x4f, 0x44, 0x75, 0x7e, 0x63, 0x68,
|
||||
0xb1, 0xba, 0xa7, 0xac, 0x9d, 0x96, 0x8b, 0x80, 0xe9, 0xe2, 0xff, 0xf4, 0xc5, 0xce, 0xd3, 0xd8,
|
||||
0x7a, 0x71, 0x6c, 0x67, 0x56, 0x5d, 0x40, 0x4b, 0x22, 0x29, 0x34, 0x3f, 0x0e, 0x05, 0x18, 0x13,
|
||||
0xca, 0xc1, 0xdc, 0xd7, 0xe6, 0xed, 0xf0, 0xfb, 0x92, 0x99, 0x84, 0x8f, 0xbe, 0xb5, 0xa8, 0xa3,
|
||||
};
|
||||
0xca, 0xc1, 0xdc, 0xd7, 0xe6, 0xed, 0xf0, 0xfb, 0x92, 0x99, 0x84, 0x8f, 0xbe, 0xb5, 0xa8, 0xa3
|
||||
];
|
||||
|
||||
private static ReadOnlySpan<byte> _gfMul0D => new byte[]
|
||||
{
|
||||
private static ReadOnlySpan<byte> _gfMul0D =>
|
||||
[
|
||||
0x00, 0x0d, 0x1a, 0x17, 0x34, 0x39, 0x2e, 0x23, 0x68, 0x65, 0x72, 0x7f, 0x5c, 0x51, 0x46, 0x4b,
|
||||
0xd0, 0xdd, 0xca, 0xc7, 0xe4, 0xe9, 0xfe, 0xf3, 0xb8, 0xb5, 0xa2, 0xaf, 0x8c, 0x81, 0x96, 0x9b,
|
||||
0xbb, 0xb6, 0xa1, 0xac, 0x8f, 0x82, 0x95, 0x98, 0xd3, 0xde, 0xc9, 0xc4, 0xe7, 0xea, 0xfd, 0xf0,
|
||||
@@ -146,11 +146,11 @@ namespace ARMeilleure.Instructions
|
||||
0xb7, 0xba, 0xad, 0xa0, 0x83, 0x8e, 0x99, 0x94, 0xdf, 0xd2, 0xc5, 0xc8, 0xeb, 0xe6, 0xf1, 0xfc,
|
||||
0x67, 0x6a, 0x7d, 0x70, 0x53, 0x5e, 0x49, 0x44, 0x0f, 0x02, 0x15, 0x18, 0x3b, 0x36, 0x21, 0x2c,
|
||||
0x0c, 0x01, 0x16, 0x1b, 0x38, 0x35, 0x22, 0x2f, 0x64, 0x69, 0x7e, 0x73, 0x50, 0x5d, 0x4a, 0x47,
|
||||
0xdc, 0xd1, 0xc6, 0xcb, 0xe8, 0xe5, 0xf2, 0xff, 0xb4, 0xb9, 0xae, 0xa3, 0x80, 0x8d, 0x9a, 0x97,
|
||||
};
|
||||
0xdc, 0xd1, 0xc6, 0xcb, 0xe8, 0xe5, 0xf2, 0xff, 0xb4, 0xb9, 0xae, 0xa3, 0x80, 0x8d, 0x9a, 0x97
|
||||
];
|
||||
|
||||
private static ReadOnlySpan<byte> _gfMul0E => new byte[]
|
||||
{
|
||||
private static ReadOnlySpan<byte> _gfMul0E =>
|
||||
[
|
||||
0x00, 0x0e, 0x1c, 0x12, 0x38, 0x36, 0x24, 0x2a, 0x70, 0x7e, 0x6c, 0x62, 0x48, 0x46, 0x54, 0x5a,
|
||||
0xe0, 0xee, 0xfc, 0xf2, 0xd8, 0xd6, 0xc4, 0xca, 0x90, 0x9e, 0x8c, 0x82, 0xa8, 0xa6, 0xb4, 0xba,
|
||||
0xdb, 0xd5, 0xc7, 0xc9, 0xe3, 0xed, 0xff, 0xf1, 0xab, 0xa5, 0xb7, 0xb9, 0x93, 0x9d, 0x8f, 0x81,
|
||||
@@ -166,18 +166,18 @@ namespace ARMeilleure.Instructions
|
||||
0xec, 0xe2, 0xf0, 0xfe, 0xd4, 0xda, 0xc8, 0xc6, 0x9c, 0x92, 0x80, 0x8e, 0xa4, 0xaa, 0xb8, 0xb6,
|
||||
0x0c, 0x02, 0x10, 0x1e, 0x34, 0x3a, 0x28, 0x26, 0x7c, 0x72, 0x60, 0x6e, 0x44, 0x4a, 0x58, 0x56,
|
||||
0x37, 0x39, 0x2b, 0x25, 0x0f, 0x01, 0x13, 0x1d, 0x47, 0x49, 0x5b, 0x55, 0x7f, 0x71, 0x63, 0x6d,
|
||||
0xd7, 0xd9, 0xcb, 0xc5, 0xef, 0xe1, 0xf3, 0xfd, 0xa7, 0xa9, 0xbb, 0xb5, 0x9f, 0x91, 0x83, 0x8d,
|
||||
};
|
||||
0xd7, 0xd9, 0xcb, 0xc5, 0xef, 0xe1, 0xf3, 0xfd, 0xa7, 0xa9, 0xbb, 0xb5, 0x9f, 0x91, 0x83, 0x8d
|
||||
];
|
||||
|
||||
private static ReadOnlySpan<byte> _srPerm => new byte[]
|
||||
{
|
||||
0, 13, 10, 7, 4, 1, 14, 11, 8, 5, 2, 15, 12, 9, 6, 3,
|
||||
};
|
||||
private static ReadOnlySpan<byte> _srPerm =>
|
||||
[
|
||||
0, 13, 10, 7, 4, 1, 14, 11, 8, 5, 2, 15, 12, 9, 6, 3
|
||||
];
|
||||
|
||||
private static ReadOnlySpan<byte> _isrPerm => new byte[]
|
||||
{
|
||||
0, 5, 10, 15, 4, 9, 14, 3, 8, 13, 2, 7, 12, 1, 6, 11,
|
||||
};
|
||||
private static ReadOnlySpan<byte> _isrPerm =>
|
||||
[
|
||||
0, 5, 10, 15, 4, 9, 14, 3, 8, 13, 2, 7, 12, 1, 6, 11
|
||||
];
|
||||
#pragma warning restore IDE1006
|
||||
#endregion
|
||||
|
||||
|
||||
@@ -245,8 +245,8 @@ namespace ARMeilleure.Instructions
|
||||
string name = nameof(Math.Round);
|
||||
|
||||
MethodInfo info = (op.Size & 1) == 0
|
||||
? typeof(MathF).GetMethod(name, new Type[] { typeof(float), typeof(MidpointRounding) })
|
||||
: typeof(Math).GetMethod(name, new Type[] { typeof(double), typeof(MidpointRounding) });
|
||||
? typeof(MathF).GetMethod(name, [typeof(float), typeof(MidpointRounding)])
|
||||
: typeof(Math).GetMethod(name, [typeof(double), typeof(MidpointRounding)]);
|
||||
|
||||
return context.Call(info, n, Const((int)roundMode));
|
||||
}
|
||||
|
||||
@@ -18,19 +18,19 @@ namespace ARMeilleure.Instructions
|
||||
static class InstEmitSimdHelper
|
||||
{
|
||||
#region "Masks"
|
||||
public static readonly long[] EvenMasks = new long[]
|
||||
{
|
||||
public static readonly long[] EvenMasks =
|
||||
[
|
||||
14L << 56 | 12L << 48 | 10L << 40 | 08L << 32 | 06L << 24 | 04L << 16 | 02L << 8 | 00L << 0, // B
|
||||
13L << 56 | 12L << 48 | 09L << 40 | 08L << 32 | 05L << 24 | 04L << 16 | 01L << 8 | 00L << 0, // H
|
||||
11L << 56 | 10L << 48 | 09L << 40 | 08L << 32 | 03L << 24 | 02L << 16 | 01L << 8 | 00L << 0, // S
|
||||
};
|
||||
11L << 56 | 10L << 48 | 09L << 40 | 08L << 32 | 03L << 24 | 02L << 16 | 01L << 8 | 00L << 0 // S
|
||||
];
|
||||
|
||||
public static readonly long[] OddMasks = new long[]
|
||||
{
|
||||
public static readonly long[] OddMasks =
|
||||
[
|
||||
15L << 56 | 13L << 48 | 11L << 40 | 09L << 32 | 07L << 24 | 05L << 16 | 03L << 8 | 01L << 0, // B
|
||||
15L << 56 | 14L << 48 | 11L << 40 | 10L << 32 | 07L << 24 | 06L << 16 | 03L << 8 | 02L << 0, // H
|
||||
15L << 56 | 14L << 48 | 13L << 40 | 12L << 32 | 07L << 24 | 06L << 16 | 05L << 8 | 04L << 0, // S
|
||||
};
|
||||
15L << 56 | 14L << 48 | 13L << 40 | 12L << 32 | 07L << 24 | 06L << 16 | 05L << 8 | 04L << 0 // S
|
||||
];
|
||||
|
||||
public const long ZeroMask = 128L << 56 | 128L << 48 | 128L << 40 | 128L << 32 | 128L << 24 | 128L << 16 | 128L << 8 | 128L << 0;
|
||||
|
||||
@@ -44,118 +44,118 @@ namespace ARMeilleure.Instructions
|
||||
#endregion
|
||||
|
||||
#region "X86 SSE Intrinsics"
|
||||
public static readonly Intrinsic[] X86PaddInstruction = new Intrinsic[]
|
||||
{
|
||||
public static readonly Intrinsic[] X86PaddInstruction =
|
||||
[
|
||||
Intrinsic.X86Paddb,
|
||||
Intrinsic.X86Paddw,
|
||||
Intrinsic.X86Paddd,
|
||||
Intrinsic.X86Paddq,
|
||||
};
|
||||
Intrinsic.X86Paddq
|
||||
];
|
||||
|
||||
public static readonly Intrinsic[] X86PcmpeqInstruction = new Intrinsic[]
|
||||
{
|
||||
public static readonly Intrinsic[] X86PcmpeqInstruction =
|
||||
[
|
||||
Intrinsic.X86Pcmpeqb,
|
||||
Intrinsic.X86Pcmpeqw,
|
||||
Intrinsic.X86Pcmpeqd,
|
||||
Intrinsic.X86Pcmpeqq,
|
||||
};
|
||||
Intrinsic.X86Pcmpeqq
|
||||
];
|
||||
|
||||
public static readonly Intrinsic[] X86PcmpgtInstruction = new Intrinsic[]
|
||||
{
|
||||
public static readonly Intrinsic[] X86PcmpgtInstruction =
|
||||
[
|
||||
Intrinsic.X86Pcmpgtb,
|
||||
Intrinsic.X86Pcmpgtw,
|
||||
Intrinsic.X86Pcmpgtd,
|
||||
Intrinsic.X86Pcmpgtq,
|
||||
};
|
||||
Intrinsic.X86Pcmpgtq
|
||||
];
|
||||
|
||||
public static readonly Intrinsic[] X86PmaxsInstruction = new Intrinsic[]
|
||||
{
|
||||
public static readonly Intrinsic[] X86PmaxsInstruction =
|
||||
[
|
||||
Intrinsic.X86Pmaxsb,
|
||||
Intrinsic.X86Pmaxsw,
|
||||
Intrinsic.X86Pmaxsd,
|
||||
};
|
||||
Intrinsic.X86Pmaxsd
|
||||
];
|
||||
|
||||
public static readonly Intrinsic[] X86PmaxuInstruction = new Intrinsic[]
|
||||
{
|
||||
public static readonly Intrinsic[] X86PmaxuInstruction =
|
||||
[
|
||||
Intrinsic.X86Pmaxub,
|
||||
Intrinsic.X86Pmaxuw,
|
||||
Intrinsic.X86Pmaxud,
|
||||
};
|
||||
Intrinsic.X86Pmaxud
|
||||
];
|
||||
|
||||
public static readonly Intrinsic[] X86PminsInstruction = new Intrinsic[]
|
||||
{
|
||||
public static readonly Intrinsic[] X86PminsInstruction =
|
||||
[
|
||||
Intrinsic.X86Pminsb,
|
||||
Intrinsic.X86Pminsw,
|
||||
Intrinsic.X86Pminsd,
|
||||
};
|
||||
Intrinsic.X86Pminsd
|
||||
];
|
||||
|
||||
public static readonly Intrinsic[] X86PminuInstruction = new Intrinsic[]
|
||||
{
|
||||
public static readonly Intrinsic[] X86PminuInstruction =
|
||||
[
|
||||
Intrinsic.X86Pminub,
|
||||
Intrinsic.X86Pminuw,
|
||||
Intrinsic.X86Pminud,
|
||||
};
|
||||
Intrinsic.X86Pminud
|
||||
];
|
||||
|
||||
public static readonly Intrinsic[] X86PmovsxInstruction = new Intrinsic[]
|
||||
{
|
||||
public static readonly Intrinsic[] X86PmovsxInstruction =
|
||||
[
|
||||
Intrinsic.X86Pmovsxbw,
|
||||
Intrinsic.X86Pmovsxwd,
|
||||
Intrinsic.X86Pmovsxdq,
|
||||
};
|
||||
Intrinsic.X86Pmovsxdq
|
||||
];
|
||||
|
||||
public static readonly Intrinsic[] X86PmovzxInstruction = new Intrinsic[]
|
||||
{
|
||||
public static readonly Intrinsic[] X86PmovzxInstruction =
|
||||
[
|
||||
Intrinsic.X86Pmovzxbw,
|
||||
Intrinsic.X86Pmovzxwd,
|
||||
Intrinsic.X86Pmovzxdq,
|
||||
};
|
||||
Intrinsic.X86Pmovzxdq
|
||||
];
|
||||
|
||||
public static readonly Intrinsic[] X86PsllInstruction = new Intrinsic[]
|
||||
{
|
||||
public static readonly Intrinsic[] X86PsllInstruction =
|
||||
[
|
||||
0,
|
||||
Intrinsic.X86Psllw,
|
||||
Intrinsic.X86Pslld,
|
||||
Intrinsic.X86Psllq,
|
||||
};
|
||||
Intrinsic.X86Psllq
|
||||
];
|
||||
|
||||
public static readonly Intrinsic[] X86PsraInstruction = new Intrinsic[]
|
||||
{
|
||||
public static readonly Intrinsic[] X86PsraInstruction =
|
||||
[
|
||||
0,
|
||||
Intrinsic.X86Psraw,
|
||||
Intrinsic.X86Psrad,
|
||||
};
|
||||
Intrinsic.X86Psrad
|
||||
];
|
||||
|
||||
public static readonly Intrinsic[] X86PsrlInstruction = new Intrinsic[]
|
||||
{
|
||||
public static readonly Intrinsic[] X86PsrlInstruction =
|
||||
[
|
||||
0,
|
||||
Intrinsic.X86Psrlw,
|
||||
Intrinsic.X86Psrld,
|
||||
Intrinsic.X86Psrlq,
|
||||
};
|
||||
Intrinsic.X86Psrlq
|
||||
];
|
||||
|
||||
public static readonly Intrinsic[] X86PsubInstruction = new Intrinsic[]
|
||||
{
|
||||
public static readonly Intrinsic[] X86PsubInstruction =
|
||||
[
|
||||
Intrinsic.X86Psubb,
|
||||
Intrinsic.X86Psubw,
|
||||
Intrinsic.X86Psubd,
|
||||
Intrinsic.X86Psubq,
|
||||
};
|
||||
Intrinsic.X86Psubq
|
||||
];
|
||||
|
||||
public static readonly Intrinsic[] X86PunpckhInstruction = new Intrinsic[]
|
||||
{
|
||||
public static readonly Intrinsic[] X86PunpckhInstruction =
|
||||
[
|
||||
Intrinsic.X86Punpckhbw,
|
||||
Intrinsic.X86Punpckhwd,
|
||||
Intrinsic.X86Punpckhdq,
|
||||
Intrinsic.X86Punpckhqdq,
|
||||
};
|
||||
Intrinsic.X86Punpckhqdq
|
||||
];
|
||||
|
||||
public static readonly Intrinsic[] X86PunpcklInstruction = new Intrinsic[]
|
||||
{
|
||||
public static readonly Intrinsic[] X86PunpcklInstruction =
|
||||
[
|
||||
Intrinsic.X86Punpcklbw,
|
||||
Intrinsic.X86Punpcklwd,
|
||||
Intrinsic.X86Punpckldq,
|
||||
Intrinsic.X86Punpcklqdq,
|
||||
};
|
||||
Intrinsic.X86Punpcklqdq
|
||||
];
|
||||
#endregion
|
||||
|
||||
public static void EnterArmFpMode(EmitterContext context, Func<FPState, Operand> getFpFlag)
|
||||
@@ -460,8 +460,8 @@ namespace ARMeilleure.Instructions
|
||||
IOpCodeSimd op = (IOpCodeSimd)context.CurrOp;
|
||||
|
||||
MethodInfo info = (op.Size & 1) == 0
|
||||
? typeof(MathHelperF).GetMethod(name, new Type[] { typeof(float) })
|
||||
: typeof(MathHelper).GetMethod(name, new Type[] { typeof(double) });
|
||||
? typeof(MathHelperF).GetMethod(name, [typeof(float)])
|
||||
: typeof(MathHelper).GetMethod(name, [typeof(double)]);
|
||||
|
||||
return context.Call(info, n);
|
||||
}
|
||||
@@ -473,8 +473,8 @@ namespace ARMeilleure.Instructions
|
||||
string name = nameof(MathHelper.Round);
|
||||
|
||||
MethodInfo info = (op.Size & 1) == 0
|
||||
? typeof(MathHelperF).GetMethod(name, new Type[] { typeof(float), typeof(int) })
|
||||
: typeof(MathHelper).GetMethod(name, new Type[] { typeof(double), typeof(int) });
|
||||
? typeof(MathHelperF).GetMethod(name, [typeof(float), typeof(int)])
|
||||
: typeof(MathHelper).GetMethod(name, [typeof(double), typeof(int)]);
|
||||
|
||||
return context.Call(info, n, Const((int)roundMode));
|
||||
}
|
||||
|
||||
@@ -12,17 +12,17 @@ namespace ARMeilleure.Instructions
|
||||
static partial class InstEmit
|
||||
{
|
||||
#region "Masks"
|
||||
private static readonly long[] _masksE0_Uzp = new long[]
|
||||
{
|
||||
private static readonly long[] _masksE0_Uzp =
|
||||
[
|
||||
13L << 56 | 09L << 48 | 05L << 40 | 01L << 32 | 12L << 24 | 08L << 16 | 04L << 8 | 00L << 0,
|
||||
11L << 56 | 10L << 48 | 03L << 40 | 02L << 32 | 09L << 24 | 08L << 16 | 01L << 8 | 00L << 0,
|
||||
};
|
||||
11L << 56 | 10L << 48 | 03L << 40 | 02L << 32 | 09L << 24 | 08L << 16 | 01L << 8 | 00L << 0
|
||||
];
|
||||
|
||||
private static readonly long[] _masksE1_Uzp = new long[]
|
||||
{
|
||||
private static readonly long[] _masksE1_Uzp =
|
||||
[
|
||||
15L << 56 | 11L << 48 | 07L << 40 | 03L << 32 | 14L << 24 | 10L << 16 | 06L << 8 | 02L << 0,
|
||||
15L << 56 | 14L << 48 | 07L << 40 | 06L << 32 | 13L << 24 | 12L << 16 | 05L << 8 | 04L << 0,
|
||||
};
|
||||
15L << 56 | 14L << 48 | 07L << 40 | 06L << 32 | 13L << 24 | 12L << 16 | 05L << 8 | 04L << 0
|
||||
];
|
||||
#endregion
|
||||
|
||||
public static void Dup_Gp(ArmEmitterContext context)
|
||||
@@ -601,7 +601,7 @@ namespace ARMeilleure.Instructions
|
||||
{
|
||||
Operand d = GetVec(op.Rd);
|
||||
|
||||
List<Operand> args = new();
|
||||
List<Operand> args = [];
|
||||
|
||||
if (!isTbl)
|
||||
{
|
||||
|
||||
@@ -13,17 +13,17 @@ namespace ARMeilleure.Instructions
|
||||
{
|
||||
#region "Masks"
|
||||
// Same as InstEmitSimdMove, as the instructions do the same thing.
|
||||
private static readonly long[] _masksE0_Uzp = new long[]
|
||||
{
|
||||
private static readonly long[] _masksE0_Uzp =
|
||||
[
|
||||
13L << 56 | 09L << 48 | 05L << 40 | 01L << 32 | 12L << 24 | 08L << 16 | 04L << 8 | 00L << 0,
|
||||
11L << 56 | 10L << 48 | 03L << 40 | 02L << 32 | 09L << 24 | 08L << 16 | 01L << 8 | 00L << 0,
|
||||
};
|
||||
11L << 56 | 10L << 48 | 03L << 40 | 02L << 32 | 09L << 24 | 08L << 16 | 01L << 8 | 00L << 0
|
||||
];
|
||||
|
||||
private static readonly long[] _masksE1_Uzp = new long[]
|
||||
{
|
||||
private static readonly long[] _masksE1_Uzp =
|
||||
[
|
||||
15L << 56 | 11L << 48 | 07L << 40 | 03L << 32 | 14L << 24 | 10L << 16 | 06L << 8 | 02L << 0,
|
||||
15L << 56 | 14L << 48 | 07L << 40 | 06L << 32 | 13L << 24 | 12L << 16 | 05L << 8 | 04L << 0,
|
||||
};
|
||||
15L << 56 | 14L << 48 | 07L << 40 | 06L << 32 | 13L << 24 | 12L << 16 | 05L << 8 | 04L << 0
|
||||
];
|
||||
#endregion
|
||||
|
||||
public static void Vmov_I(ArmEmitterContext context)
|
||||
|
||||
@@ -17,10 +17,10 @@ namespace ARMeilleure.Instructions
|
||||
static partial class InstEmit
|
||||
{
|
||||
#region "Masks"
|
||||
private static readonly long[] _masks_SliSri = new long[] // Replication masks.
|
||||
{
|
||||
0x0101010101010101L, 0x0001000100010001L, 0x0000000100000001L, 0x0000000000000001L,
|
||||
};
|
||||
private static readonly long[] _masks_SliSri =
|
||||
[
|
||||
0x0101010101010101L, 0x0001000100010001L, 0x0000000100000001L, 0x0000000000000001L
|
||||
];
|
||||
#endregion
|
||||
|
||||
public static void Rshrn_V(ArmEmitterContext context)
|
||||
|
||||
@@ -211,7 +211,7 @@ namespace ARMeilleure.Instructions
|
||||
return (ulong)(size - 1);
|
||||
}
|
||||
|
||||
private static ReadOnlySpan<byte> ClzNibbleTbl => new byte[] { 4, 3, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 };
|
||||
private static ReadOnlySpan<byte> ClzNibbleTbl => [4, 3, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0];
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
public static ulong CountLeadingZeros(ulong value, int size) // size is 8, 16, 32 or 64 (SIMD&FP or Base Inst.).
|
||||
|
||||
@@ -27,7 +27,7 @@ namespace ARMeilleure.IntermediateRepresentation
|
||||
{
|
||||
get
|
||||
{
|
||||
_domFrontiers ??= new HashSet<BasicBlock>();
|
||||
_domFrontiers ??= [];
|
||||
|
||||
return _domFrontiers;
|
||||
}
|
||||
@@ -38,7 +38,7 @@ namespace ARMeilleure.IntermediateRepresentation
|
||||
public BasicBlock(int index)
|
||||
{
|
||||
Operations = new IntrusiveList<Operation>();
|
||||
Predecessors = new List<BasicBlock>();
|
||||
Predecessors = [];
|
||||
|
||||
Index = index;
|
||||
}
|
||||
|
||||
@@ -304,7 +304,7 @@ namespace ARMeilleure.IntermediateRepresentation
|
||||
ushort newCount = checked((ushort)(count + 1));
|
||||
ushort newCapacity = (ushort)Math.Min(capacity * 2, ushort.MaxValue);
|
||||
|
||||
Span<T> oldSpan = new Span<T>(data, count);
|
||||
Span<T> oldSpan = new(data, count);
|
||||
|
||||
capacity = newCapacity;
|
||||
data = Allocators.References.Allocate<T>(capacity);
|
||||
@@ -338,7 +338,7 @@ namespace ARMeilleure.IntermediateRepresentation
|
||||
throw new OverflowException();
|
||||
}
|
||||
|
||||
Span<T> oldSpan = new Span<T>(data, (int)count);
|
||||
Span<T> oldSpan = new(data, (int)count);
|
||||
|
||||
capacity = newCapacity;
|
||||
data = Allocators.References.Allocate<T>(capacity);
|
||||
@@ -352,7 +352,7 @@ namespace ARMeilleure.IntermediateRepresentation
|
||||
|
||||
private static void Remove<T>(in T item, ref T* data, ref ushort count) where T : unmanaged
|
||||
{
|
||||
Span<T> span = new Span<T>(data, count);
|
||||
Span<T> span = new(data, count);
|
||||
|
||||
for (int i = 0; i < span.Length; i++)
|
||||
{
|
||||
@@ -372,7 +372,7 @@ namespace ARMeilleure.IntermediateRepresentation
|
||||
|
||||
private static void Remove<T>(in T item, ref T* data, ref uint count) where T : unmanaged
|
||||
{
|
||||
Span<T> span = new Span<T>(data, (int)count);
|
||||
Span<T> span = new(data, (int)count);
|
||||
|
||||
for (int i = 0; i < span.Length; i++)
|
||||
{
|
||||
|
||||
@@ -198,7 +198,7 @@ namespace ARMeilleure.Signal
|
||||
|
||||
ControlFlowGraph cfg = context.GetControlFlowGraph();
|
||||
|
||||
OperandType[] argTypes = new OperandType[] { OperandType.I32, OperandType.I64, OperandType.I64 };
|
||||
OperandType[] argTypes = [OperandType.I32, OperandType.I64, OperandType.I64];
|
||||
|
||||
return Compiler.Compile(cfg, argTypes, OperandType.None, CompilerOptions.HighCq, RuntimeInformation.ProcessArchitecture).Code;
|
||||
}
|
||||
@@ -252,7 +252,7 @@ namespace ARMeilleure.Signal
|
||||
|
||||
ControlFlowGraph cfg = context.GetControlFlowGraph();
|
||||
|
||||
OperandType[] argTypes = new OperandType[] { OperandType.I64 };
|
||||
OperandType[] argTypes = [OperandType.I64];
|
||||
|
||||
return Compiler.Compile(cfg, argTypes, OperandType.I32, CompilerOptions.HighCq, RuntimeInformation.ProcessArchitecture).Code;
|
||||
}
|
||||
|
||||
@@ -30,7 +30,7 @@ namespace ARMeilleure.Signal
|
||||
|
||||
ControlFlowGraph cfg = context.GetControlFlowGraph();
|
||||
|
||||
OperandType[] argTypes = new OperandType[] { OperandType.I64 };
|
||||
OperandType[] argTypes = [OperandType.I64];
|
||||
|
||||
return Compiler.Compile(cfg, argTypes, OperandType.I32, CompilerOptions.HighCq, RuntimeInformation.ProcessArchitecture).Map<DebugPartialUnmap>();
|
||||
}
|
||||
@@ -47,7 +47,7 @@ namespace ARMeilleure.Signal
|
||||
|
||||
ControlFlowGraph cfg = context.GetControlFlowGraph();
|
||||
|
||||
OperandType[] argTypes = new OperandType[] { OperandType.I64 };
|
||||
OperandType[] argTypes = [OperandType.I64];
|
||||
|
||||
return Compiler.Compile(cfg, argTypes, OperandType.I32, CompilerOptions.HighCq, RuntimeInformation.ProcessArchitecture).Map<DebugThreadLocalMapGetOrReserve>();
|
||||
}
|
||||
@@ -76,7 +76,7 @@ namespace ARMeilleure.Signal
|
||||
|
||||
ControlFlowGraph cfg = context.GetControlFlowGraph();
|
||||
|
||||
OperandType[] argTypes = new OperandType[] { OperandType.I64 };
|
||||
OperandType[] argTypes = [OperandType.I64];
|
||||
|
||||
return Compiler.Compile(cfg, argTypes, OperandType.None, CompilerOptions.HighCq, RuntimeInformation.ProcessArchitecture).Map<DebugNativeWriteLoop>();
|
||||
}
|
||||
|
||||
@@ -55,7 +55,7 @@ namespace ARMeilleure.Translation
|
||||
public Aarch32Mode Mode { get; }
|
||||
|
||||
private int _ifThenBlockStateIndex = 0;
|
||||
private Condition[] _ifThenBlockState = Array.Empty<Condition>();
|
||||
private Condition[] _ifThenBlockState = [];
|
||||
public bool IsInIfThenBlock => _ifThenBlockStateIndex < _ifThenBlockState.Length;
|
||||
public Condition CurrentIfThenBlockCond => _ifThenBlockState[_ifThenBlockStateIndex];
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@ namespace ARMeilleure.Translation.Cache
|
||||
}
|
||||
}
|
||||
|
||||
private readonly List<MemoryBlock> _blocks = new();
|
||||
private readonly List<MemoryBlock> _blocks = [];
|
||||
|
||||
public CacheMemoryAllocator(int capacity)
|
||||
{
|
||||
|
||||
@@ -25,7 +25,7 @@ namespace ARMeilleure.Translation.Cache
|
||||
|
||||
private static CacheMemoryAllocator _cacheAllocator;
|
||||
|
||||
private static readonly List<CacheEntry> _cacheEntries = new();
|
||||
private static readonly List<CacheEntry> _cacheEntries = [];
|
||||
|
||||
private static readonly Lock _lock = new();
|
||||
private static bool _initialized;
|
||||
|
||||
@@ -6,8 +6,8 @@ namespace ARMeilleure.Translation.Cache
|
||||
{
|
||||
class JitCacheInvalidation
|
||||
{
|
||||
private static readonly int[] _invalidationCode = new int[]
|
||||
{
|
||||
private static readonly int[] _invalidationCode =
|
||||
[
|
||||
unchecked((int)0xd53b0022), // mrs x2, ctr_el0
|
||||
unchecked((int)0xd3504c44), // ubfx x4, x2, #16, #4
|
||||
unchecked((int)0x52800083), // mov w3, #0x4
|
||||
@@ -35,8 +35,8 @@ namespace ARMeilleure.Translation.Cache
|
||||
unchecked((int)0x54ffffa8), // b.hi 54 <ic_clear_loop>
|
||||
unchecked((int)0xd5033b9f), // dsb ish
|
||||
unchecked((int)0xd5033fdf), // isb
|
||||
unchecked((int)0xd65f03c0), // ret
|
||||
};
|
||||
unchecked((int)0xd65f03c0) // ret
|
||||
];
|
||||
|
||||
private delegate void InvalidateCache(ulong start, ulong end);
|
||||
|
||||
|
||||
@@ -47,8 +47,8 @@ namespace ARMeilleure.Translation
|
||||
{
|
||||
RemoveUnreachableBlocks(Blocks);
|
||||
|
||||
HashSet<BasicBlock> visited = new HashSet<BasicBlock>();
|
||||
Stack<BasicBlock> blockStack = new Stack<BasicBlock>();
|
||||
HashSet<BasicBlock> visited = [];
|
||||
Stack<BasicBlock> blockStack = new();
|
||||
|
||||
Array.Resize(ref _postOrderBlocks, Blocks.Count);
|
||||
Array.Resize(ref _postOrderMap, Blocks.Count);
|
||||
@@ -88,8 +88,8 @@ namespace ARMeilleure.Translation
|
||||
|
||||
private void RemoveUnreachableBlocks(IntrusiveList<BasicBlock> blocks)
|
||||
{
|
||||
HashSet<BasicBlock> visited = new HashSet<BasicBlock>();
|
||||
Queue<BasicBlock> workQueue = new Queue<BasicBlock>();
|
||||
HashSet<BasicBlock> visited = [];
|
||||
Queue<BasicBlock> workQueue = new();
|
||||
|
||||
visited.Add(Entry);
|
||||
workQueue.Enqueue(Entry);
|
||||
|
||||
@@ -108,7 +108,7 @@ namespace ARMeilleure.Translation
|
||||
/// <returns>A list of all values sorted by Key Order</returns>
|
||||
public List<TV> AsList()
|
||||
{
|
||||
List<TV> list = new();
|
||||
List<TV> list = [];
|
||||
|
||||
AddToList(_root, list);
|
||||
|
||||
|
||||
@@ -154,7 +154,7 @@ namespace ARMeilleure.Translation.PTC
|
||||
private void InitializeCarriers()
|
||||
{
|
||||
_infosStream = MemoryStreamManager.Shared.GetStream();
|
||||
_codesList = new List<byte[]>();
|
||||
_codesList = [];
|
||||
_relocsStream = MemoryStreamManager.Shared.GetStream();
|
||||
_unwindInfosStream = MemoryStreamManager.Shared.GetStream();
|
||||
}
|
||||
@@ -750,7 +750,7 @@ namespace ARMeilleure.Translation.PTC
|
||||
UnwindInfo unwindInfo,
|
||||
bool highCq)
|
||||
{
|
||||
CompiledFunction cFunc = new CompiledFunction(code, unwindInfo, RelocInfo.Empty);
|
||||
CompiledFunction cFunc = new(code, unwindInfo, RelocInfo.Empty);
|
||||
GuestFunction gFunc = cFunc.MapWithPointer<GuestFunction>(out nint gFuncPointer);
|
||||
|
||||
return new TranslatedFunction(gFunc, gFuncPointer, callCounter, guestSize, highCq);
|
||||
@@ -765,7 +765,7 @@ namespace ARMeilleure.Translation.PTC
|
||||
|
||||
private void StubCode(int index)
|
||||
{
|
||||
_codesList[index] = Array.Empty<byte>();
|
||||
_codesList[index] = [];
|
||||
}
|
||||
|
||||
private void StubReloc(int relocEntriesCount)
|
||||
@@ -945,7 +945,7 @@ namespace ARMeilleure.Translation.PTC
|
||||
WriteCode(code.AsSpan());
|
||||
|
||||
// WriteReloc.
|
||||
using BinaryWriter relocInfoWriter = new BinaryWriter(_relocsStream, EncodingCache.UTF8NoBOM, true);
|
||||
using BinaryWriter relocInfoWriter = new(_relocsStream, EncodingCache.UTF8NoBOM, true);
|
||||
|
||||
foreach (RelocEntry entry in relocInfo.Entries)
|
||||
{
|
||||
@@ -955,7 +955,7 @@ namespace ARMeilleure.Translation.PTC
|
||||
}
|
||||
|
||||
// WriteUnwindInfo.
|
||||
using BinaryWriter unwindInfoWriter = new BinaryWriter(_unwindInfosStream, EncodingCache.UTF8NoBOM, true);
|
||||
using BinaryWriter unwindInfoWriter = new(_unwindInfosStream, EncodingCache.UTF8NoBOM, true);
|
||||
|
||||
unwindInfoWriter.Write(unwindInfo.PushEntries.Length);
|
||||
|
||||
|
||||
@@ -50,7 +50,7 @@ namespace ARMeilleure.Translation.PTC
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public static List<T> DeserializeList<T>(Stream stream) where T : struct
|
||||
{
|
||||
List<T> list = new();
|
||||
List<T> list = [];
|
||||
|
||||
int count = DeserializeStructure<int>(stream);
|
||||
|
||||
|
||||
@@ -26,9 +26,10 @@ namespace ARMeilleure.Translation.PTC
|
||||
|
||||
private const uint InternalVersion = 5518; //! Not to be incremented manually for each change to the ARMeilleure project.
|
||||
|
||||
private static readonly uint[] _migrateInternalVersions = {
|
||||
1866,
|
||||
};
|
||||
private static readonly uint[] _migrateInternalVersions =
|
||||
[
|
||||
1866
|
||||
];
|
||||
|
||||
private const int SaveInterval = 30; // Seconds.
|
||||
|
||||
@@ -111,7 +112,7 @@ namespace ARMeilleure.Translation.PTC
|
||||
|
||||
public ConcurrentQueue<(ulong address, FuncProfile funcProfile)> GetProfiledFuncsToTranslate(TranslatorCache<TranslatedFunction> funcs)
|
||||
{
|
||||
ConcurrentQueue<(ulong address, FuncProfile funcProfile)> profiledFuncsToTranslate = new ConcurrentQueue<(ulong address, FuncProfile funcProfile)>();
|
||||
ConcurrentQueue<(ulong address, FuncProfile funcProfile)> profiledFuncsToTranslate = new();
|
||||
|
||||
foreach (KeyValuePair<ulong, FuncProfile> profiledFunc in ProfiledFuncs)
|
||||
{
|
||||
|
||||
@@ -95,7 +95,7 @@ namespace ARMeilleure.Translation
|
||||
// This is required because we have a implicit context load at the start of the function,
|
||||
// but if there is a jump to the start of the function, the context load would trash the modified values.
|
||||
// Here we insert a new entry block that will jump to the existing entry block.
|
||||
BasicBlock newEntry = new BasicBlock(cfg.Blocks.Count);
|
||||
BasicBlock newEntry = new(cfg.Blocks.Count);
|
||||
|
||||
cfg.UpdateEntry(newEntry);
|
||||
}
|
||||
|
||||
@@ -47,7 +47,7 @@ namespace ARMeilleure.Translation
|
||||
DefMap[] globalDefs = new DefMap[cfg.Blocks.Count];
|
||||
Operand[] localDefs = new Operand[cfg.LocalsCount + RegisterConsts.TotalCount];
|
||||
|
||||
Queue<BasicBlock> dfPhiBlocks = new Queue<BasicBlock>();
|
||||
Queue<BasicBlock> dfPhiBlocks = new();
|
||||
|
||||
for (BasicBlock block = cfg.Blocks.First; block != null; block = block.ListNext)
|
||||
{
|
||||
|
||||
@@ -222,7 +222,7 @@ namespace ARMeilleure.Translation
|
||||
|
||||
internal TranslatedFunction Translate(ulong address, ExecutionMode mode, bool highCq, bool singleStep = false)
|
||||
{
|
||||
ArmEmitterContext context = new ArmEmitterContext(
|
||||
ArmEmitterContext context = new(
|
||||
Memory,
|
||||
CountTable,
|
||||
FunctionTable,
|
||||
@@ -260,7 +260,7 @@ namespace ARMeilleure.Translation
|
||||
Logger.EndPass(PassName.RegisterUsage);
|
||||
|
||||
OperandType retType = OperandType.I64;
|
||||
OperandType[] argTypes = new OperandType[] { OperandType.I64 };
|
||||
OperandType[] argTypes = [OperandType.I64];
|
||||
|
||||
CompilerOptions options = highCq ? CompilerOptions.HighCq : CompilerOptions.None;
|
||||
|
||||
@@ -478,7 +478,7 @@ namespace ARMeilleure.Translation
|
||||
|
||||
public void InvalidateJitCacheRegion(ulong address, ulong size)
|
||||
{
|
||||
ulong[] overlapAddresses = Array.Empty<ulong>();
|
||||
ulong[] overlapAddresses = [];
|
||||
|
||||
int overlapsCount = Functions.GetOverlaps(address, size, ref overlapAddresses);
|
||||
|
||||
|
||||
@@ -36,7 +36,7 @@ namespace ARMeilleure.Translation
|
||||
Sync = new object();
|
||||
|
||||
_requests = new Stack<RejitRequest>();
|
||||
_requestAddresses = new HashSet<ulong>();
|
||||
_requestAddresses = [];
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -142,7 +142,7 @@ namespace ARMeilleure.Translation
|
||||
/// <returns>Generated <see cref="DispatchStub"/></returns>
|
||||
private nint GenerateDispatchStub()
|
||||
{
|
||||
EmitterContext context = new EmitterContext();
|
||||
EmitterContext context = new();
|
||||
|
||||
Operand lblFallback = Label();
|
||||
Operand lblEnd = Label();
|
||||
@@ -187,7 +187,7 @@ namespace ARMeilleure.Translation
|
||||
|
||||
ControlFlowGraph cfg = context.GetControlFlowGraph();
|
||||
OperandType retType = OperandType.I64;
|
||||
OperandType[] argTypes = new[] { OperandType.I64 };
|
||||
OperandType[] argTypes = [OperandType.I64];
|
||||
|
||||
GuestFunction func = Compiler.Compile(cfg, argTypes, retType, CompilerOptions.HighCq, RuntimeInformation.ProcessArchitecture).Map<GuestFunction>();
|
||||
|
||||
@@ -200,7 +200,7 @@ namespace ARMeilleure.Translation
|
||||
/// <returns>Generated <see cref="SlowDispatchStub"/></returns>
|
||||
private nint GenerateSlowDispatchStub()
|
||||
{
|
||||
EmitterContext context = new EmitterContext();
|
||||
EmitterContext context = new();
|
||||
|
||||
// Load the target guest address from the native context.
|
||||
Operand nativeContext = context.LoadArgument(OperandType.I64, 0);
|
||||
@@ -212,7 +212,7 @@ namespace ARMeilleure.Translation
|
||||
|
||||
ControlFlowGraph cfg = context.GetControlFlowGraph();
|
||||
OperandType retType = OperandType.I64;
|
||||
OperandType[] argTypes = new[] { OperandType.I64 };
|
||||
OperandType[] argTypes = [OperandType.I64];
|
||||
|
||||
GuestFunction func = Compiler.Compile(cfg, argTypes, retType, CompilerOptions.HighCq, RuntimeInformation.ProcessArchitecture).Map<GuestFunction>();
|
||||
|
||||
@@ -251,7 +251,7 @@ namespace ARMeilleure.Translation
|
||||
/// <returns><see cref="DispatchLoop"/> function</returns>
|
||||
private DispatcherFunction GenerateDispatchLoop()
|
||||
{
|
||||
EmitterContext context = new EmitterContext();
|
||||
EmitterContext context = new();
|
||||
|
||||
Operand beginLbl = Label();
|
||||
Operand endLbl = Label();
|
||||
@@ -281,7 +281,7 @@ namespace ARMeilleure.Translation
|
||||
|
||||
ControlFlowGraph cfg = context.GetControlFlowGraph();
|
||||
OperandType retType = OperandType.None;
|
||||
OperandType[] argTypes = new[] { OperandType.I64, OperandType.I64 };
|
||||
OperandType[] argTypes = [OperandType.I64, OperandType.I64];
|
||||
|
||||
return Compiler.Compile(cfg, argTypes, retType, CompilerOptions.HighCq, RuntimeInformation.ProcessArchitecture).Map<DispatcherFunction>();
|
||||
}
|
||||
@@ -292,7 +292,7 @@ namespace ARMeilleure.Translation
|
||||
/// <returns><see cref="ContextWrapper"/> function</returns>
|
||||
private WrapperFunction GenerateContextWrapper()
|
||||
{
|
||||
EmitterContext context = new EmitterContext();
|
||||
EmitterContext context = new();
|
||||
|
||||
Operand nativeContext = context.LoadArgument(OperandType.I64, 0);
|
||||
Operand guestMethod = context.LoadArgument(OperandType.I64, 1);
|
||||
@@ -305,7 +305,7 @@ namespace ARMeilleure.Translation
|
||||
|
||||
ControlFlowGraph cfg = context.GetControlFlowGraph();
|
||||
OperandType retType = OperandType.I64;
|
||||
OperandType[] argTypes = new[] { OperandType.I64, OperandType.I64 };
|
||||
OperandType[] argTypes = [OperandType.I64, OperandType.I64];
|
||||
|
||||
return Compiler.Compile(cfg, argTypes, retType, CompilerOptions.HighCq, RuntimeInformation.ProcessArchitecture).Map<WrapperFunction>();
|
||||
}
|
||||
|
||||
@@ -139,7 +139,7 @@ namespace ARMeilleure.Translation
|
||||
|
||||
ControlFlowGraph cfg = context.GetControlFlowGraph();
|
||||
|
||||
OperandType[] argTypes = new OperandType[] { OperandType.I64 };
|
||||
OperandType[] argTypes = [OperandType.I64];
|
||||
|
||||
return Compiler.Compile(cfg, argTypes, OperandType.I32, CompilerOptions.HighCq, RuntimeInformation.ProcessArchitecture).Map<FpFlagsPInvokeTest>();
|
||||
}
|
||||
|
||||
@@ -31,19 +31,19 @@ namespace Ryujinx.Audio.Backends.CompatLayer
|
||||
private const int Minus6dBInQ15 = (int)(0.501f * RawQ15One);
|
||||
private const int Minus12dBInQ15 = (int)(0.251f * RawQ15One);
|
||||
|
||||
private static readonly long[] _defaultSurroundToStereoCoefficients = new long[4]
|
||||
{
|
||||
private static readonly long[] _defaultSurroundToStereoCoefficients =
|
||||
[
|
||||
RawQ15One,
|
||||
Minus3dBInQ15,
|
||||
Minus12dBInQ15,
|
||||
Minus3dBInQ15,
|
||||
};
|
||||
Minus3dBInQ15
|
||||
];
|
||||
|
||||
private static readonly long[] _defaultStereoToMonoCoefficients = new long[2]
|
||||
{
|
||||
private static readonly long[] _defaultStereoToMonoCoefficients =
|
||||
[
|
||||
Minus6dBInQ15,
|
||||
Minus6dBInQ15,
|
||||
};
|
||||
Minus6dBInQ15
|
||||
];
|
||||
|
||||
private const int SurroundChannelCount = 6;
|
||||
private const int StereoChannelCount = 2;
|
||||
|
||||
@@ -164,12 +164,12 @@ namespace Ryujinx.Audio
|
||||
/// <summary>
|
||||
/// The default coefficients used for standard 5.1 surround to stereo downmixing.
|
||||
/// </summary>
|
||||
public static readonly float[] DefaultSurroundToStereoCoefficients = new float[4]
|
||||
{
|
||||
public static readonly float[] DefaultSurroundToStereoCoefficients =
|
||||
[
|
||||
1.0f,
|
||||
0.707f,
|
||||
0.251f,
|
||||
0.707f,
|
||||
};
|
||||
0.707f
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -173,7 +173,7 @@ namespace Ryujinx.Audio.Input
|
||||
// TODO: Detect if the driver supports audio input
|
||||
}
|
||||
|
||||
return new[] { Constants.DefaultDeviceInputName };
|
||||
return [Constants.DefaultDeviceInputName];
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -167,7 +167,7 @@ namespace Ryujinx.Audio.Output
|
||||
/// <returns>The list of all audio outputs name</returns>
|
||||
public string[] ListAudioOuts()
|
||||
{
|
||||
return new[] { Constants.DefaultDeviceOutputName };
|
||||
return [Constants.DefaultDeviceOutputName];
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -10,14 +10,14 @@ namespace Ryujinx.Audio.Renderer.Device
|
||||
/// <summary>
|
||||
/// All the defined virtual devices.
|
||||
/// </summary>
|
||||
public static readonly VirtualDevice[] Devices = new VirtualDevice[5]
|
||||
{
|
||||
public static readonly VirtualDevice[] Devices =
|
||||
[
|
||||
new("AudioStereoJackOutput", 2, true),
|
||||
new("AudioBuiltInSpeakerOutput", 2, false),
|
||||
new("AudioTvOutput", 6, false),
|
||||
new("AudioUsbDeviceOutput", 2, true),
|
||||
new("AudioExternalOutput", 6, true),
|
||||
};
|
||||
new("AudioExternalOutput", 6, true)
|
||||
];
|
||||
|
||||
/// <summary>
|
||||
/// The name of the <see cref="VirtualDevice"/>.
|
||||
|
||||
@@ -46,7 +46,7 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
|
||||
SampleRate = sampleRate;
|
||||
BufferCount = mixBufferCount + voiceChannelCountMax;
|
||||
Buffers = mixBuffer;
|
||||
Commands = new List<ICommand>();
|
||||
Commands = [];
|
||||
MemoryManager = memoryManager;
|
||||
|
||||
_buffersEntryCount = Buffers.Length;
|
||||
|
||||
@@ -9,21 +9,29 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
|
||||
{
|
||||
public class Reverb3dCommand : ICommand
|
||||
{
|
||||
private static readonly int[] _outputEarlyIndicesTableMono = new int[20] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
|
||||
private static readonly int[] _targetEarlyDelayLineIndicesTableMono = new int[20] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 };
|
||||
private static readonly int[] _targetOutputFeedbackIndicesTableMono = new int[1] { 0 };
|
||||
private static readonly int[] _outputEarlyIndicesTableMono = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
||||
];
|
||||
private static readonly int[] _targetEarlyDelayLineIndicesTableMono = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19
|
||||
];
|
||||
private static readonly int[] _targetOutputFeedbackIndicesTableMono = [0];
|
||||
|
||||
private static readonly int[] _outputEarlyIndicesTableStereo = new int[20] { 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1 };
|
||||
private static readonly int[] _targetEarlyDelayLineIndicesTableStereo = new int[20] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 };
|
||||
private static readonly int[] _targetOutputFeedbackIndicesTableStereo = new int[2] { 0, 1 };
|
||||
private static readonly int[] _outputEarlyIndicesTableStereo = [0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1
|
||||
];
|
||||
private static readonly int[] _targetEarlyDelayLineIndicesTableStereo = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19
|
||||
];
|
||||
private static readonly int[] _targetOutputFeedbackIndicesTableStereo = [0, 1];
|
||||
|
||||
private static readonly int[] _outputEarlyIndicesTableQuadraphonic = new int[20] { 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 0, 0, 0, 0, 3, 3, 3 };
|
||||
private static readonly int[] _targetEarlyDelayLineIndicesTableQuadraphonic = new int[20] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 };
|
||||
private static readonly int[] _targetOutputFeedbackIndicesTableQuadraphonic = new int[4] { 0, 1, 2, 3 };
|
||||
private static readonly int[] _outputEarlyIndicesTableQuadraphonic = [0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 0, 0, 0, 0, 3, 3, 3
|
||||
];
|
||||
private static readonly int[] _targetEarlyDelayLineIndicesTableQuadraphonic = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19
|
||||
];
|
||||
private static readonly int[] _targetOutputFeedbackIndicesTableQuadraphonic = [0, 1, 2, 3];
|
||||
|
||||
private static readonly int[] _outputEarlyIndicesTableSurround = new int[40] { 4, 5, 0, 5, 0, 5, 1, 5, 1, 5, 1, 5, 1, 5, 2, 5, 2, 5, 2, 5, 1, 5, 1, 5, 1, 5, 0, 5, 0, 5, 0, 5, 0, 5, 3, 5, 3, 5, 3, 5 };
|
||||
private static readonly int[] _targetEarlyDelayLineIndicesTableSurround = new int[40] { 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 16, 16, 17, 17, 18, 18, 19, 19 };
|
||||
private static readonly int[] _targetOutputFeedbackIndicesTableSurround = new int[6] { 0, 1, 2, 3, -1, 3 };
|
||||
private static readonly int[] _outputEarlyIndicesTableSurround = [4, 5, 0, 5, 0, 5, 1, 5, 1, 5, 1, 5, 1, 5, 2, 5, 2, 5, 2, 5, 1, 5, 1, 5, 1, 5, 0, 5, 0, 5, 0, 5, 0, 5, 3, 5, 3, 5, 3, 5
|
||||
];
|
||||
private static readonly int[] _targetEarlyDelayLineIndicesTableSurround = [0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 16, 16, 17, 17, 18, 18, 19, 19
|
||||
];
|
||||
private static readonly int[] _targetOutputFeedbackIndicesTableSurround = [0, 1, 2, 3, -1, 3];
|
||||
|
||||
public bool Enabled { get; set; }
|
||||
|
||||
|
||||
@@ -9,25 +9,27 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
|
||||
{
|
||||
public class ReverbCommand : ICommand
|
||||
{
|
||||
private static readonly int[] _outputEarlyIndicesTableMono = new int[10] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
|
||||
private static readonly int[] _targetEarlyDelayLineIndicesTableMono = new int[10] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
|
||||
private static readonly int[] _outputIndicesTableMono = new int[4] { 0, 0, 0, 0 };
|
||||
private static readonly int[] _targetOutputFeedbackIndicesTableMono = new int[4] { 0, 1, 2, 3 };
|
||||
private static readonly int[] _outputEarlyIndicesTableMono = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
|
||||
private static readonly int[] _targetEarlyDelayLineIndicesTableMono = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
|
||||
private static readonly int[] _outputIndicesTableMono = [0, 0, 0, 0];
|
||||
private static readonly int[] _targetOutputFeedbackIndicesTableMono = [0, 1, 2, 3];
|
||||
|
||||
private static readonly int[] _outputEarlyIndicesTableStereo = new int[10] { 0, 0, 1, 1, 0, 1, 0, 0, 1, 1 };
|
||||
private static readonly int[] _targetEarlyDelayLineIndicesTableStereo = new int[10] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
|
||||
private static readonly int[] _outputIndicesTableStereo = new int[4] { 0, 0, 1, 1 };
|
||||
private static readonly int[] _targetOutputFeedbackIndicesTableStereo = new int[4] { 2, 0, 3, 1 };
|
||||
private static readonly int[] _outputEarlyIndicesTableStereo = [0, 0, 1, 1, 0, 1, 0, 0, 1, 1];
|
||||
private static readonly int[] _targetEarlyDelayLineIndicesTableStereo = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
|
||||
private static readonly int[] _outputIndicesTableStereo = [0, 0, 1, 1];
|
||||
private static readonly int[] _targetOutputFeedbackIndicesTableStereo = [2, 0, 3, 1];
|
||||
|
||||
private static readonly int[] _outputEarlyIndicesTableQuadraphonic = new int[10] { 0, 0, 1, 1, 0, 1, 2, 2, 3, 3 };
|
||||
private static readonly int[] _targetEarlyDelayLineIndicesTableQuadraphonic = new int[10] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
|
||||
private static readonly int[] _outputIndicesTableQuadraphonic = new int[4] { 0, 1, 2, 3 };
|
||||
private static readonly int[] _targetOutputFeedbackIndicesTableQuadraphonic = new int[4] { 0, 1, 2, 3 };
|
||||
private static readonly int[] _outputEarlyIndicesTableQuadraphonic = [0, 0, 1, 1, 0, 1, 2, 2, 3, 3];
|
||||
private static readonly int[] _targetEarlyDelayLineIndicesTableQuadraphonic = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
|
||||
private static readonly int[] _outputIndicesTableQuadraphonic = [0, 1, 2, 3];
|
||||
private static readonly int[] _targetOutputFeedbackIndicesTableQuadraphonic = [0, 1, 2, 3];
|
||||
|
||||
private static readonly int[] _outputEarlyIndicesTableSurround = new int[20] { 0, 5, 0, 5, 1, 5, 1, 5, 4, 5, 4, 5, 2, 5, 2, 5, 3, 5, 3, 5 };
|
||||
private static readonly int[] _targetEarlyDelayLineIndicesTableSurround = new int[20] { 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9 };
|
||||
private static readonly int[] _outputIndicesTableSurround = new int[Constants.ChannelCountMax] { 0, 1, 2, 3, 4, 5 };
|
||||
private static readonly int[] _targetOutputFeedbackIndicesTableSurround = new int[Constants.ChannelCountMax] { 0, 1, 2, 3, -1, 3 };
|
||||
private static readonly int[] _outputEarlyIndicesTableSurround = [0, 5, 0, 5, 1, 5, 1, 5, 4, 5, 4, 5, 2, 5, 2, 5, 3, 5, 3, 5
|
||||
];
|
||||
private static readonly int[] _targetEarlyDelayLineIndicesTableSurround = [0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9
|
||||
];
|
||||
private static readonly int[] _outputIndicesTableSurround = [0, 1, 2, 3, 4, 5];
|
||||
private static readonly int[] _targetOutputFeedbackIndicesTableSurround = [0, 1, 2, 3, -1, 3];
|
||||
|
||||
public bool Enabled { get; set; }
|
||||
|
||||
|
||||
@@ -10,7 +10,8 @@ namespace Ryujinx.Audio.Renderer.Dsp
|
||||
public static class ResamplerHelper
|
||||
{
|
||||
#region "Default Quality Lookup Tables"
|
||||
private static readonly short[] _normalCurveLut0 = {
|
||||
private static readonly short[] _normalCurveLut0 =
|
||||
[
|
||||
6600, 19426, 6722, 3, 6479, 19424, 6845, 9, 6359, 19419, 6968, 15, 6239, 19412, 7093, 22,
|
||||
6121, 19403, 7219, 28, 6004, 19391, 7345, 34, 5888, 19377, 7472, 41, 5773, 19361, 7600, 48,
|
||||
5659, 19342, 7728, 55, 5546, 19321, 7857, 62, 5434, 19298, 7987, 69, 5323, 19273, 8118, 77,
|
||||
@@ -42,10 +43,11 @@ namespace Ryujinx.Audio.Renderer.Dsp
|
||||
109, 8646, 19148, 4890, 101, 8513, 19183, 4997, 92, 8381, 19215, 5104, 84, 8249, 19245, 5213,
|
||||
77, 8118, 19273, 5323, 69, 7987, 19298, 5434, 62, 7857, 19321, 5546, 55, 7728, 19342, 5659,
|
||||
48, 7600, 19361, 5773, 41, 7472, 19377, 5888, 34, 7345, 19391, 6004, 28, 7219, 19403, 6121,
|
||||
22, 7093, 19412, 6239, 15, 6968, 19419, 6359, 9, 6845, 19424, 6479, 3, 6722, 19426, 6600,
|
||||
};
|
||||
22, 7093, 19412, 6239, 15, 6968, 19419, 6359, 9, 6845, 19424, 6479, 3, 6722, 19426, 6600
|
||||
];
|
||||
|
||||
private static readonly short[] _normalCurveLut1 = {
|
||||
private static readonly short[] _normalCurveLut1 =
|
||||
[
|
||||
-68, 32639, 69, -5, -200, 32630, 212, -15, -328, 32613, 359, -26, -450, 32586, 512, -36,
|
||||
-568, 32551, 669, -47, -680, 32507, 832, -58, -788, 32454, 1000, -69, -891, 32393, 1174, -80,
|
||||
-990, 32323, 1352, -92, -1084, 32244, 1536, -103, -1173, 32157, 1724, -115, -1258, 32061, 1919, -128,
|
||||
@@ -77,10 +79,11 @@ namespace Ryujinx.Audio.Renderer.Dsp
|
||||
-180, 2747, 31593, -1554, -167, 2532, 31723, -1486, -153, 2322, 31844, -1414, -140, 2118, 31956, -1338,
|
||||
-128, 1919, 32061, -1258, -115, 1724, 32157, -1173, -103, 1536, 32244, -1084, -92, 1352, 32323, -990,
|
||||
-80, 1174, 32393, -891, -69, 1000, 32454, -788, -58, 832, 32507, -680, -47, 669, 32551, -568,
|
||||
-36, 512, 32586, -450, -26, 359, 32613, -328, -15, 212, 32630, -200, -5, 69, 32639, -68,
|
||||
};
|
||||
-36, 512, 32586, -450, -26, 359, 32613, -328, -15, 212, 32630, -200, -5, 69, 32639, -68
|
||||
];
|
||||
|
||||
private static readonly short[] _normalCurveLut2 = {
|
||||
private static readonly short[] _normalCurveLut2 =
|
||||
[
|
||||
3195, 26287, 3329, -32, 3064, 26281, 3467, -34, 2936, 26270, 3608, -38, 2811, 26253, 3751, -42,
|
||||
2688, 26230, 3897, -46, 2568, 26202, 4046, -50, 2451, 26169, 4199, -54, 2338, 26130, 4354, -58,
|
||||
2227, 26085, 4512, -63, 2120, 26035, 4673, -67, 2015, 25980, 4837, -72, 1912, 25919, 5004, -76,
|
||||
@@ -112,12 +115,13 @@ namespace Ryujinx.Audio.Renderer.Dsp
|
||||
-98, 5701, 25621, 1531, -92, 5522, 25704, 1622, -87, 5347, 25780, 1716, -81, 5174, 25852, 1813,
|
||||
-76, 5004, 25919, 1912, -72, 4837, 25980, 2015, -67, 4673, 26035, 2120, -63, 4512, 26085, 2227,
|
||||
-58, 4354, 26130, 2338, -54, 4199, 26169, 2451, -50, 4046, 26202, 2568, -46, 3897, 26230, 2688,
|
||||
-42, 3751, 26253, 2811, -38, 3608, 26270, 2936, -34, 3467, 26281, 3064, -32, 3329, 26287, 3195,
|
||||
};
|
||||
-42, 3751, 26253, 2811, -38, 3608, 26270, 2936, -34, 3467, 26281, 3064, -32, 3329, 26287, 3195
|
||||
];
|
||||
#endregion
|
||||
|
||||
#region "High Quality Lookup Tables"
|
||||
private static readonly short[] _highCurveLut0 = {
|
||||
private static readonly short[] _highCurveLut0 =
|
||||
[
|
||||
-582, -23, 8740, 16386, 8833, 8, -590, 0, -573, -54, 8647, 16385, 8925, 40, -598, -1,
|
||||
-565, -84, 8555, 16383, 9018, 72, -606, -1, -557, -113, 8462, 16379, 9110, 105, -614, -2,
|
||||
-549, -142, 8370, 16375, 9203, 139, -622, -2, -541, -170, 8277, 16369, 9295, 173, -630, -3,
|
||||
@@ -181,10 +185,11 @@ namespace Ryujinx.Audio.Renderer.Dsp
|
||||
-5, -646, 244, 9480, 16354, 8093, -225, -525, -4, -638, 208, 9387, 16362, 8185, -198, -533,
|
||||
-3, -630, 173, 9295, 16369, 8277, -170, -541, -2, -622, 139, 9203, 16375, 8370, -142, -549,
|
||||
-2, -614, 105, 9110, 16379, 8462, -113, -557, -1, -606, 72, 9018, 16383, 8555, -84, -565,
|
||||
-1, -598, 40, 8925, 16385, 8647, -54, -573, 0, -590, 8, 8833, 16386, 8740, -23, -582,
|
||||
};
|
||||
-1, -598, 40, 8925, 16385, 8647, -54, -573, 0, -590, 8, 8833, 16386, 8740, -23, -582
|
||||
];
|
||||
|
||||
private static readonly short[] _highCurveLut1 = {
|
||||
private static readonly short[] _highCurveLut1 =
|
||||
[
|
||||
-12, 47, -134, 32767, 81, -16, 2, 0, -26, 108, -345, 32760, 301, -79, 17, -1,
|
||||
-40, 168, -552, 32745, 526, -144, 32, -2, -53, 226, -753, 32723, 755, -210, 47, -3,
|
||||
-66, 284, -950, 32694, 989, -277, 63, -5, -78, 340, -1143, 32658, 1226, -346, 79, -6,
|
||||
@@ -248,10 +253,11 @@ namespace Ryujinx.Audio.Renderer.Dsp
|
||||
-9, 113, -486, 1715, 32564, -1514, 447, -101, -8, 96, -415, 1469, 32615, -1331, 394, -90,
|
||||
-6, 79, -346, 1226, 32658, -1143, 340, -78, -5, 63, -277, 989, 32694, -950, 284, -66,
|
||||
-3, 47, -210, 755, 32723, -753, 226, -53, -2, 32, -144, 526, 32745, -552, 168, -40,
|
||||
-1, 17, -79, 301, 32760, -345, 108, -26, 0, 2, -16, 81, 32767, -134, 47, -12,
|
||||
};
|
||||
-1, 17, -79, 301, 32760, -345, 108, -26, 0, 2, -16, 81, 32767, -134, 47, -12
|
||||
];
|
||||
|
||||
private static readonly short[] _highCurveLut2 = {
|
||||
private static readonly short[] _highCurveLut2 =
|
||||
[
|
||||
418, -2538, 6118, 24615, 6298, -2563, 417, 0, 420, -2512, 5939, 24611, 6479, -2588, 415, 1,
|
||||
421, -2485, 5761, 24605, 6662, -2612, 412, 2, 422, -2458, 5585, 24595, 6846, -2635, 409, 3,
|
||||
423, -2430, 5410, 24582, 7030, -2658, 406, 4, 423, -2402, 5236, 24565, 7216, -2680, 403, 5,
|
||||
@@ -315,8 +321,8 @@ namespace Ryujinx.Audio.Renderer.Dsp
|
||||
7, 395, -2721, 7591, 24523, 4893, -2343, 423, 6, 399, -2701, 7403, 24546, 5064, -2373, 423,
|
||||
5, 403, -2680, 7216, 24565, 5236, -2402, 423, 4, 406, -2658, 7030, 24582, 5410, -2430, 423,
|
||||
3, 409, -2635, 6846, 24595, 5585, -2458, 422, 2, 412, -2612, 6662, 24605, 5761, -2485, 421,
|
||||
1, 415, -2588, 6479, 24611, 5939, -2512, 420, 0, 417, -2563, 6298, 24615, 6118, -2538, 418,
|
||||
};
|
||||
1, 415, -2588, 6479, 24611, 5939, -2512, 420, 0, 417, -2563, 6298, 24615, 6118, -2538, 418
|
||||
];
|
||||
#endregion
|
||||
|
||||
private static readonly float[] _normalCurveLut0F;
|
||||
|
||||
@@ -6,12 +6,14 @@ namespace Ryujinx.Audio.Renderer.Dsp.State
|
||||
{
|
||||
public struct Reverb3dState
|
||||
{
|
||||
private readonly float[] _fdnDelayMinTimes = new float[4] { 5.0f, 6.0f, 13.0f, 14.0f };
|
||||
private readonly float[] _fdnDelayMaxTimes = new float[4] { 45.704f, 82.782f, 149.94f, 271.58f };
|
||||
private readonly float[] _decayDelayMaxTimes1 = new float[4] { 17.0f, 13.0f, 9.0f, 7.0f };
|
||||
private readonly float[] _decayDelayMaxTimes2 = new float[4] { 19.0f, 11.0f, 10.0f, 6.0f };
|
||||
private readonly float[] _earlyDelayTimes = new float[20] { 0.017136f, 0.059154f, 0.16173f, 0.39019f, 0.42526f, 0.45541f, 0.68974f, 0.74591f, 0.83384f, 0.8595f, 0.0f, 0.075024f, 0.16879f, 0.2999f, 0.33744f, 0.3719f, 0.59901f, 0.71674f, 0.81786f, 0.85166f };
|
||||
public readonly float[] EarlyGain = new float[20] { 0.67096f, 0.61027f, 1.0f, 0.35680f, 0.68361f, 0.65978f, 0.51939f, 0.24712f, 0.45945f, 0.45021f, 0.64196f, 0.54879f, 0.92925f, 0.38270f, 0.72867f, 0.69794f, 0.5464f, 0.24563f, 0.45214f, 0.44042f };
|
||||
private readonly float[] _fdnDelayMinTimes = [5.0f, 6.0f, 13.0f, 14.0f];
|
||||
private readonly float[] _fdnDelayMaxTimes = [45.704f, 82.782f, 149.94f, 271.58f];
|
||||
private readonly float[] _decayDelayMaxTimes1 = [17.0f, 13.0f, 9.0f, 7.0f];
|
||||
private readonly float[] _decayDelayMaxTimes2 = [19.0f, 11.0f, 10.0f, 6.0f];
|
||||
private readonly float[] _earlyDelayTimes = [0.017136f, 0.059154f, 0.16173f, 0.39019f, 0.42526f, 0.45541f, 0.68974f, 0.74591f, 0.83384f, 0.8595f, 0.0f, 0.075024f, 0.16879f, 0.2999f, 0.33744f, 0.3719f, 0.59901f, 0.71674f, 0.81786f, 0.85166f
|
||||
];
|
||||
public readonly float[] EarlyGain = [0.67096f, 0.61027f, 1.0f, 0.35680f, 0.68361f, 0.65978f, 0.51939f, 0.24712f, 0.45945f, 0.45021f, 0.64196f, 0.54879f, 0.92925f, 0.38270f, 0.72867f, 0.69794f, 0.5464f, 0.24563f, 0.45214f, 0.44042f
|
||||
];
|
||||
|
||||
public IDelayLine[] FdnDelayLines { get; }
|
||||
public DecayDelay[] DecayDelays1 { get; }
|
||||
|
||||
@@ -7,8 +7,8 @@ namespace Ryujinx.Audio.Renderer.Dsp.State
|
||||
{
|
||||
public struct ReverbState
|
||||
{
|
||||
private static readonly float[] _fdnDelayTimes = new float[20]
|
||||
{
|
||||
private static readonly float[] _fdnDelayTimes =
|
||||
[
|
||||
// Room
|
||||
53.953247f, 79.192566f, 116.238770f, 130.615295f,
|
||||
// Hall
|
||||
@@ -18,11 +18,11 @@ namespace Ryujinx.Audio.Renderer.Dsp.State
|
||||
// Cathedral
|
||||
47.03f, 71f, 103f, 170f,
|
||||
// Max delay (Hall is the one with the highest values so identical to Hall)
|
||||
53.953247f, 79.192566f, 116.238770f, 170.615295f,
|
||||
};
|
||||
53.953247f, 79.192566f, 116.238770f, 170.615295f
|
||||
];
|
||||
|
||||
private static readonly float[] _decayDelayTimes = new float[20]
|
||||
{
|
||||
private static readonly float[] _decayDelayTimes =
|
||||
[
|
||||
// Room
|
||||
7f, 9f, 13f, 17f,
|
||||
// Hall
|
||||
@@ -32,11 +32,11 @@ namespace Ryujinx.Audio.Renderer.Dsp.State
|
||||
// Cathedral
|
||||
7f, 7f, 13f, 9f,
|
||||
// Max delay (Hall is the one with the highest values so identical to Hall)
|
||||
7f, 9f, 13f, 17f,
|
||||
};
|
||||
7f, 9f, 13f, 17f
|
||||
];
|
||||
|
||||
private static readonly float[] _earlyDelayTimes = new float[50]
|
||||
{
|
||||
private static readonly float[] _earlyDelayTimes =
|
||||
[
|
||||
// Room
|
||||
0.0f, 3.5f, 2.8f, 3.9f, 2.7f, 13.4f, 7.9f, 8.4f, 9.9f, 12.0f,
|
||||
// Chamber
|
||||
@@ -46,11 +46,11 @@ namespace Ryujinx.Audio.Renderer.Dsp.State
|
||||
// Cathedral
|
||||
33.1f, 43.3f, 22.8f, 37.9f, 14.9f, 35.3f, 17.9f, 34.2f, 0.0f, 43.3f,
|
||||
// Disabled
|
||||
0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f,
|
||||
};
|
||||
0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f
|
||||
];
|
||||
|
||||
private static readonly float[] _earlyGainBase = new float[50]
|
||||
{
|
||||
private static readonly float[] _earlyGainBase =
|
||||
[
|
||||
// Room
|
||||
0.70f, 0.68f, 0.70f, 0.68f, 0.70f, 0.68f, 0.70f, 0.68f, 0.68f, 0.68f,
|
||||
// Chamber
|
||||
@@ -60,11 +60,11 @@ namespace Ryujinx.Audio.Renderer.Dsp.State
|
||||
// Cathedral
|
||||
0.93f, 0.92f, 0.87f, 0.86f, 0.94f, 0.81f, 0.80f, 0.77f, 0.76f, 0.65f,
|
||||
// Disabled
|
||||
0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f,
|
||||
};
|
||||
0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f
|
||||
];
|
||||
|
||||
private static readonly float[] _preDelayTimes = new float[5]
|
||||
{
|
||||
private static readonly float[] _preDelayTimes =
|
||||
[
|
||||
// Room
|
||||
12.5f,
|
||||
// Chamber
|
||||
@@ -74,8 +74,8 @@ namespace Ryujinx.Audio.Renderer.Dsp.State
|
||||
// Cathedral
|
||||
50.0f,
|
||||
// Disabled
|
||||
0.0f,
|
||||
};
|
||||
0.0f
|
||||
];
|
||||
|
||||
public DelayLine[] FdnDelayLines { get; }
|
||||
public DecayDelay[] DecayDelays { get; }
|
||||
|
||||
@@ -436,7 +436,7 @@ namespace Ryujinx.Audio.Renderer.Server
|
||||
return result;
|
||||
}
|
||||
|
||||
PoolMapper poolMapper = new PoolMapper(_processHandle, _memoryPools, _behaviourContext.IsMemoryPoolForceMappingEnabled());
|
||||
PoolMapper poolMapper = new(_processHandle, _memoryPools, _behaviourContext.IsMemoryPoolForceMappingEnabled());
|
||||
|
||||
result = stateUpdater.UpdateVoices(_voiceContext, poolMapper);
|
||||
|
||||
|
||||
@@ -83,7 +83,7 @@ namespace Ryujinx.BuildValidationTasks
|
||||
if (isGitRunner && encounteredIssue)
|
||||
throw new JsonException("1 or more locales are invalid!");
|
||||
|
||||
JsonSerializerOptions jsonOptions = new JsonSerializerOptions()
|
||||
JsonSerializerOptions jsonOptions = new()
|
||||
{
|
||||
WriteIndented = true,
|
||||
NewLine = "\n",
|
||||
|
||||
@@ -106,7 +106,7 @@ namespace Ryujinx.Common.Collections
|
||||
/// <returns>A list of all RangeNodes sorted by Key Order</returns>
|
||||
public List<RangeNode<TKey, TValue>> AsList()
|
||||
{
|
||||
List<RangeNode<TKey, TValue>> list = new();
|
||||
List<RangeNode<TKey, TValue>> list = [];
|
||||
|
||||
AddToList(Root, list);
|
||||
|
||||
|
||||
@@ -139,7 +139,7 @@ namespace Ryujinx.Common.Collections
|
||||
/// <param name="list">List to add the tree pairs into</param>
|
||||
public List<KeyValuePair<TKey, TValue>> AsLevelOrderList()
|
||||
{
|
||||
List<KeyValuePair<TKey, TValue>> list = new();
|
||||
List<KeyValuePair<TKey, TValue>> list = [];
|
||||
|
||||
Queue<Node<TKey, TValue>> nodes = new();
|
||||
|
||||
@@ -168,7 +168,7 @@ namespace Ryujinx.Common.Collections
|
||||
/// <returns>A list of all KeyValuePairs sorted by Key Order</returns>
|
||||
public List<KeyValuePair<TKey, TValue>> AsList()
|
||||
{
|
||||
List<KeyValuePair<TKey, TValue>> list = new();
|
||||
List<KeyValuePair<TKey, TValue>> list = [];
|
||||
|
||||
AddToList(Root, list);
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ namespace Ryujinx.Common.Configuration
|
||||
|
||||
public ModMetadata()
|
||||
{
|
||||
Mods = new List<Mod>();
|
||||
Mods = [];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -164,7 +164,7 @@ namespace Ryujinx.Common.Extensions
|
||||
// Not enough data in the current segment, try to peek for the data we need.
|
||||
T buffer = default;
|
||||
|
||||
Span<byte> tempSpan = new Span<byte>(&buffer, sizeof(T));
|
||||
Span<byte> tempSpan = new(&buffer, sizeof(T));
|
||||
|
||||
if (!reader.TryCopyTo(tempSpan))
|
||||
{
|
||||
|
||||
@@ -132,7 +132,7 @@ namespace Ryujinx.Common.Logging
|
||||
_enabledClasses[index] = true;
|
||||
}
|
||||
|
||||
_logTargets = new List<ILogTarget>();
|
||||
_logTargets = [];
|
||||
|
||||
_time = Stopwatch.StartNew();
|
||||
|
||||
@@ -203,7 +203,7 @@ namespace Ryujinx.Common.Logging
|
||||
|
||||
public static IReadOnlyCollection<LogLevel> GetEnabledLevels()
|
||||
{
|
||||
Log?[] logs = new[] { Debug, Info, Warning, Error, Guest, AccessLog, Stub, Trace };
|
||||
Log?[] logs = [Debug, Info, Warning, Error, Guest, AccessLog, Stub, Trace];
|
||||
List<LogLevel> levels = new(logs.Length);
|
||||
foreach (Log? log in logs)
|
||||
{
|
||||
|
||||
@@ -125,8 +125,8 @@ namespace Ryujinx.Common.PreciseSleep
|
||||
}
|
||||
|
||||
private readonly Lock _lock = new();
|
||||
private readonly List<NanosleepThread> _threads = new();
|
||||
private readonly List<NanosleepThread> _active = new();
|
||||
private readonly List<NanosleepThread> _threads = [];
|
||||
private readonly List<NanosleepThread> _active = [];
|
||||
private readonly Stack<NanosleepThread> _free = new();
|
||||
private readonly AutoResetEvent _signalTarget;
|
||||
|
||||
|
||||
@@ -51,7 +51,7 @@ namespace Ryujinx.Common.SystemInterop
|
||||
private long _lastId;
|
||||
|
||||
private readonly Lock _lock = new();
|
||||
private readonly List<WaitingObject> _waitingObjects = new();
|
||||
private readonly List<WaitingObject> _waitingObjects = [];
|
||||
|
||||
private WindowsGranularTimer()
|
||||
{
|
||||
|
||||
@@ -105,6 +105,7 @@ namespace Ryujinx.Common
|
||||
"0100b04011742000", // Monster Hunter Rise
|
||||
|
||||
//Mario Franchise
|
||||
"010021d00812a000", // Arcade Archives VS. SUPER MARIO BROS.
|
||||
"01006d0017f7a000", // Mario & Luigi: Brothership
|
||||
"010003000e146000", // Mario & Sonic at the Olympic Games Tokyo 2020
|
||||
"010067300059a000", // Mario + Rabbids: Kingdom Battle
|
||||
@@ -212,32 +213,41 @@ namespace Ryujinx.Common
|
||||
//Misc Games
|
||||
"010056e00853a000", // A Hat in Time
|
||||
"0100fd1014726000", // Baldurs Gate: Dark Alliance
|
||||
"0100c6800b934000", // Brawlhalla
|
||||
"0100dbf01000a000", // Burnout Paradise Remastered
|
||||
"0100744001588000", // Cars 3: Driven to Win
|
||||
"0100b41013c82000", // Cruis'n Blast
|
||||
"010085900337e000", // Death Squared
|
||||
"01001b300b9be000", // Diablo III: Eternal Collection
|
||||
"010027400cdc6000", // Divinity Original 2 - Definitive Edition
|
||||
"01008c8012920000", // Dying Light Platinum Edition
|
||||
"01001cc01b2d4000", // Goat Simulator 3
|
||||
"01003620068ea000", // Hand of Fate 2
|
||||
"010085500130a000", // Lego City: Undercover
|
||||
"010073c01af34000", // LEGO Horizon Adventures
|
||||
"0100d71004694000", // Minecraft
|
||||
"01007430037f6000", // Monopoly
|
||||
"0100853015e86000", // No Man's Sky
|
||||
"01007bb017812000", // Portal
|
||||
"0100abd01785c000", // Portal 2
|
||||
"01008e200c5c2000", // Muse Dash
|
||||
"01007820196a6000", // Red Dead Redemption
|
||||
"0100e8300a67a000", // Risk
|
||||
"01002f7013224000", // Rune Factory 5
|
||||
"01008d100d43e000", // Saints Row IV
|
||||
"0100de600beee000", // Saints Row: The Third - The Full Package
|
||||
"01001180021fa000", // Shovel Knight: Specter of Torment
|
||||
"0100e65002bb8000", // Stardew Valley
|
||||
"0100d7a01b7a2000", // Star Wars: Bounty Hunter
|
||||
"0100800015926000", // Suika Game
|
||||
"01007ad00013e000", // Super Bomberman R
|
||||
"0100e46006708000", // Terraria
|
||||
"0100605008268000", // Titan Quest
|
||||
"01000a10041ea000", // The Elder Scrolls V: Skyrim
|
||||
"010057a01e4d4000", // TSUKIHIME -A piece of blue glass moon-
|
||||
"010080b00ad66000", // Undertale
|
||||
"010069401adb8000", // Unicorn Overlord
|
||||
"01005c600ac68000", // Valkyria Chronicles 4
|
||||
"0100534009ff2000", // Yonder - The cloud catcher chronicles
|
||||
];
|
||||
}
|
||||
|
||||
@@ -91,7 +91,7 @@ namespace Ryujinx.Common
|
||||
return null;
|
||||
}
|
||||
|
||||
using StreamReader reader = new StreamReader(stream);
|
||||
using StreamReader reader = new(stream);
|
||||
return reader.ReadToEnd();
|
||||
}
|
||||
|
||||
@@ -103,7 +103,7 @@ namespace Ryujinx.Common
|
||||
return null;
|
||||
}
|
||||
|
||||
using StreamReader reader = new StreamReader(stream);
|
||||
using StreamReader reader = new(stream);
|
||||
return await reader.ReadToEndAsync();
|
||||
}
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ namespace Ryujinx.Common.Utilities
|
||||
public static void CopyDirectory(string sourceDir, string destinationDir, bool recursive)
|
||||
{
|
||||
// Get information about the source directory
|
||||
DirectoryInfo dir = new DirectoryInfo(sourceDir);
|
||||
DirectoryInfo dir = new(sourceDir);
|
||||
|
||||
// Check if the source directory exists
|
||||
if (!dir.Exists)
|
||||
@@ -49,7 +49,7 @@ namespace Ryujinx.Common.Utilities
|
||||
|
||||
public static string SanitizeFileName(string fileName)
|
||||
{
|
||||
HashSet<char> reservedChars = new HashSet<char>(Path.GetInvalidFileNameChars());
|
||||
HashSet<char> reservedChars = new(Path.GetInvalidFileNameChars());
|
||||
return string.Concat(fileName.Select(c => reservedChars.Contains(c) ? '_' : c));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@ namespace Ryujinx.Common.Utilities
|
||||
|
||||
public static string Format(MessagePackObject obj)
|
||||
{
|
||||
IndentedStringBuilder builder = new IndentedStringBuilder();
|
||||
IndentedStringBuilder builder = new();
|
||||
|
||||
FormatMsgPackObj(obj, builder);
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
using Gommon;
|
||||
using System;
|
||||
using System.Drawing;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Ryujinx.Common.Utilities
|
||||
@@ -18,7 +19,7 @@ namespace Ryujinx.Common.Utilities
|
||||
{
|
||||
while (CyclingEnabled)
|
||||
{
|
||||
await Task.Delay(15);
|
||||
await Task.Delay(20);
|
||||
Tick();
|
||||
}
|
||||
});
|
||||
@@ -32,29 +33,47 @@ namespace Ryujinx.Common.Utilities
|
||||
|
||||
|
||||
public static float Speed { get; set; } = 1;
|
||||
|
||||
private static readonly Lock _lock = new();
|
||||
|
||||
public static Color Color { get; private set; } = Color.Blue;
|
||||
private static Color _color = Color.Blue;
|
||||
|
||||
public static ref Color Color
|
||||
{
|
||||
get
|
||||
{
|
||||
lock (_lock)
|
||||
{
|
||||
return ref _color;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void Tick()
|
||||
{
|
||||
Color = HsbToRgb((Color.GetHue() + Speed) / 360);
|
||||
lock (_lock)
|
||||
{
|
||||
_color = HsbToRgb((_color.GetHue() + Speed) / 360);
|
||||
|
||||
UpdatedHandler.Call(Color.ToArgb());
|
||||
_updatedHandler.Call(_color.ToArgb());
|
||||
}
|
||||
}
|
||||
|
||||
public static void Reset()
|
||||
{
|
||||
Color = Color.Blue;
|
||||
UpdatedHandler.Clear();
|
||||
_updatedHandler.Clear();
|
||||
|
||||
lock (_lock)
|
||||
_color = Color.Blue;
|
||||
}
|
||||
|
||||
public static event Action<int> Updated
|
||||
{
|
||||
add => UpdatedHandler.Add(value);
|
||||
remove => UpdatedHandler.Remove(value);
|
||||
add => _updatedHandler.Add(value);
|
||||
remove => _updatedHandler.Remove(value);
|
||||
}
|
||||
|
||||
internal static Event<int> UpdatedHandler = new();
|
||||
private static readonly Event<int> _updatedHandler = new();
|
||||
|
||||
private static Color HsbToRgb(float hue, float saturation = 1, float brightness = 1)
|
||||
{
|
||||
|
||||
@@ -46,7 +46,7 @@ namespace Ryujinx.Common.Utilities
|
||||
{
|
||||
if (Path.GetExtension(filename).Equals(".XCI", StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
XCIFileTrimmer trimmer = new XCIFileTrimmer(filename, log);
|
||||
XCIFileTrimmer trimmer = new(filename, log);
|
||||
return trimmer.CanBeTrimmed;
|
||||
}
|
||||
|
||||
@@ -57,7 +57,7 @@ namespace Ryujinx.Common.Utilities
|
||||
{
|
||||
if (Path.GetExtension(filename).Equals(".XCI", StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
XCIFileTrimmer trimmer = new XCIFileTrimmer(filename, log);
|
||||
XCIFileTrimmer trimmer = new(filename, log);
|
||||
return trimmer.CanBeUntrimmed;
|
||||
}
|
||||
|
||||
@@ -267,7 +267,7 @@ namespace Ryujinx.Common.Utilities
|
||||
|
||||
try
|
||||
{
|
||||
FileInfo info = new FileInfo(Filename);
|
||||
FileInfo info = new(Filename);
|
||||
if ((info.Attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)
|
||||
{
|
||||
try
|
||||
@@ -288,7 +288,7 @@ namespace Ryujinx.Common.Utilities
|
||||
return OperationOutcome.FileSizeChanged;
|
||||
}
|
||||
|
||||
FileStream outfileStream = new FileStream(_filename, FileMode.Open, FileAccess.Write, FileShare.Write);
|
||||
FileStream outfileStream = new(_filename, FileMode.Open, FileAccess.Write, FileShare.Write);
|
||||
|
||||
try
|
||||
{
|
||||
@@ -327,7 +327,7 @@ namespace Ryujinx.Common.Utilities
|
||||
{
|
||||
Log?.Write(LogType.Info, "Untrimming...");
|
||||
|
||||
FileInfo info = new FileInfo(Filename);
|
||||
FileInfo info = new(Filename);
|
||||
if ((info.Attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)
|
||||
{
|
||||
try
|
||||
@@ -348,7 +348,7 @@ namespace Ryujinx.Common.Utilities
|
||||
return OperationOutcome.FileSizeChanged;
|
||||
}
|
||||
|
||||
FileStream outfileStream = new FileStream(_filename, FileMode.Append, FileAccess.Write, FileShare.Write);
|
||||
FileStream outfileStream = new(_filename, FileMode.Append, FileAccess.Write, FileShare.Write);
|
||||
long bytesToWriteB = UntrimmedFileSizeB - FileSizeB;
|
||||
|
||||
try
|
||||
|
||||
@@ -49,7 +49,7 @@ namespace ARMeilleure.Common
|
||||
|
||||
public TableSparseBlock(ulong size, Action<IntPtr> ensureMapped, PageInitDelegate pageInit)
|
||||
{
|
||||
SparseMemoryBlock block = new SparseMemoryBlock(size, pageInit, null);
|
||||
SparseMemoryBlock block = new(size, pageInit, null);
|
||||
|
||||
_trackingEvent = (ulong address, ulong size, bool write) =>
|
||||
{
|
||||
@@ -164,7 +164,7 @@ namespace ARMeilleure.Common
|
||||
_fillBottomLevel = new SparseMemoryBlock(bottomLevelSize, null, _sparseFill);
|
||||
_fillBottomLevelPtr = (TEntry*)_fillBottomLevel.Block.Pointer;
|
||||
|
||||
_sparseReserved = new List<TableSparseBlock>();
|
||||
_sparseReserved = [];
|
||||
_sparseLock = new ReaderWriterLockSlim();
|
||||
|
||||
_sparseBlockSize = bottomLevelSize;
|
||||
@@ -363,7 +363,7 @@ namespace ARMeilleure.Common
|
||||
/// <returns>The new sparse block that was added</returns>
|
||||
private TableSparseBlock ReserveNewSparseBlock()
|
||||
{
|
||||
TableSparseBlock block = new TableSparseBlock(_sparseBlockSize, EnsureMapped, InitLeafPage);
|
||||
TableSparseBlock block = new(_sparseBlockSize, EnsureMapped, InitLeafPage);
|
||||
|
||||
_sparseReserved.Add(block);
|
||||
_sparseReservedOffset = 0;
|
||||
@@ -416,7 +416,7 @@ namespace ARMeilleure.Common
|
||||
IntPtr address = (IntPtr)NativeAllocator.Instance.Allocate((uint)size);
|
||||
page = new AddressTablePage(false, address);
|
||||
|
||||
Span<T> span = new Span<T>((void*)page.Address, length);
|
||||
Span<T> span = new((void*)page.Address, length);
|
||||
span.Fill(fill);
|
||||
}
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ namespace Ryujinx.Cpu.Jit.HostTracked
|
||||
public AddressSpacePartitioned(MemoryTracking tracking, MemoryBlock backingMemory, NativePageTable nativePageTable, bool useProtectionMirrors)
|
||||
{
|
||||
_backingMemory = backingMemory;
|
||||
_partitions = new();
|
||||
_partitions = [];
|
||||
_asAllocator = new(tracking, nativePageTable.Read, _partitions);
|
||||
_updatePtCallback = nativePageTable.Update;
|
||||
_useProtectionMirrors = useProtectionMirrors;
|
||||
|
||||
@@ -340,7 +340,7 @@ namespace Ryujinx.Cpu.Jit
|
||||
{
|
||||
int pages = GetPagesCount(va, (uint)size, out va);
|
||||
|
||||
List<MemoryRange> regions = new List<MemoryRange>();
|
||||
List<MemoryRange> regions = [];
|
||||
|
||||
ulong regionStart = GetPhysicalAddressChecked(va);
|
||||
ulong regionSize = PageSize;
|
||||
|
||||
@@ -443,7 +443,7 @@ namespace Ryujinx.Cpu.Jit
|
||||
return null;
|
||||
}
|
||||
|
||||
List<HostMemoryRange> regions = new List<HostMemoryRange>();
|
||||
List<HostMemoryRange> regions = [];
|
||||
ulong endVa = va + size;
|
||||
|
||||
try
|
||||
|
||||
@@ -36,7 +36,7 @@ namespace Ryujinx.Cpu.LightningJit.Arm32
|
||||
RegisterAllocator = registerAllocator;
|
||||
MemoryManagerType = mmType;
|
||||
_itConditions = new ArmCondition[4];
|
||||
_pendingBranches = new();
|
||||
_pendingBranches = [];
|
||||
IsThumb = isThumb;
|
||||
}
|
||||
|
||||
|
||||
@@ -10,8 +10,8 @@ namespace Ryujinx.Cpu.LightningJit.Arm32
|
||||
{
|
||||
public static MultiBlock DecodeMulti(CpuPreset cpuPreset, IMemoryManager memoryManager, ulong address, bool isThumb)
|
||||
{
|
||||
List<Block> blocks = new();
|
||||
List<ulong> branchTargets = new();
|
||||
List<Block> blocks = [];
|
||||
List<ulong> branchTargets = [];
|
||||
|
||||
while (true)
|
||||
{
|
||||
@@ -202,7 +202,7 @@ namespace Ryujinx.Cpu.LightningJit.Arm32
|
||||
{
|
||||
ulong startAddress = address;
|
||||
|
||||
List<InstInfo> insts = new();
|
||||
List<InstInfo> insts = [];
|
||||
|
||||
uint encoding;
|
||||
InstMeta meta;
|
||||
|
||||
@@ -9,494 +9,494 @@ namespace Ryujinx.Cpu.LightningJit.Arm32
|
||||
|
||||
static InstTableA32()
|
||||
{
|
||||
InstEncoding[] condConstraints = new InstEncoding[]
|
||||
{
|
||||
new(0xF0000000, 0xF0000000),
|
||||
};
|
||||
InstEncoding[] condConstraints =
|
||||
[
|
||||
new(0xF0000000, 0xF0000000)
|
||||
];
|
||||
|
||||
InstEncoding[] condRnsRnConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] condRnsRnConstraints =
|
||||
[
|
||||
new(0xF0000000, 0xF0000000),
|
||||
new(0x000F0000, 0x001F0000),
|
||||
new(0x000D0000, 0x000F0000),
|
||||
};
|
||||
new(0x000D0000, 0x000F0000)
|
||||
];
|
||||
|
||||
InstEncoding[] condRnConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] condRnConstraints =
|
||||
[
|
||||
new(0xF0000000, 0xF0000000),
|
||||
new(0x000D0000, 0x000F0000),
|
||||
};
|
||||
new(0x000D0000, 0x000F0000)
|
||||
];
|
||||
|
||||
InstEncoding[] vdVmConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] vdVmConstraints =
|
||||
[
|
||||
new(0x00001000, 0x00001000),
|
||||
new(0x00000001, 0x00000001),
|
||||
};
|
||||
new(0x00000001, 0x00000001)
|
||||
];
|
||||
|
||||
InstEncoding[] condRnConstraints2 = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] condRnConstraints2 =
|
||||
[
|
||||
new(0xF0000000, 0xF0000000),
|
||||
new(0x0000000F, 0x0000000F),
|
||||
};
|
||||
new(0x0000000F, 0x0000000F)
|
||||
];
|
||||
|
||||
InstEncoding[] optionConstraints = new InstEncoding[]
|
||||
{
|
||||
new(0x00000000, 0x0000000F),
|
||||
};
|
||||
InstEncoding[] optionConstraints =
|
||||
[
|
||||
new(0x00000000, 0x0000000F)
|
||||
];
|
||||
|
||||
InstEncoding[] condPuwPwPuwPuwConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] condPuwPwPuwPuwConstraints =
|
||||
[
|
||||
new(0xF0000000, 0xF0000000),
|
||||
new(0x00000000, 0x01A00000),
|
||||
new(0x01000000, 0x01200000),
|
||||
new(0x00200000, 0x01A00000),
|
||||
new(0x01A00000, 0x01A00000),
|
||||
};
|
||||
new(0x01A00000, 0x01A00000)
|
||||
];
|
||||
|
||||
InstEncoding[] condRnPuwConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] condRnPuwConstraints =
|
||||
[
|
||||
new(0xF0000000, 0xF0000000),
|
||||
new(0x000F0000, 0x000F0000),
|
||||
new(0x00000000, 0x01A00000),
|
||||
};
|
||||
new(0x00000000, 0x01A00000)
|
||||
];
|
||||
|
||||
InstEncoding[] condPuwConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] condPuwConstraints =
|
||||
[
|
||||
new(0xF0000000, 0xF0000000),
|
||||
new(0x00000000, 0x01A00000),
|
||||
};
|
||||
new(0x00000000, 0x01A00000)
|
||||
];
|
||||
|
||||
InstEncoding[] condRnPwConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] condRnPwConstraints =
|
||||
[
|
||||
new(0xF0000000, 0xF0000000),
|
||||
new(0x000F0000, 0x000F0000),
|
||||
new(0x00200000, 0x01200000),
|
||||
};
|
||||
new(0x00200000, 0x01200000)
|
||||
];
|
||||
|
||||
InstEncoding[] condPwConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] condPwConstraints =
|
||||
[
|
||||
new(0xF0000000, 0xF0000000),
|
||||
new(0x00200000, 0x01200000),
|
||||
};
|
||||
new(0x00200000, 0x01200000)
|
||||
];
|
||||
|
||||
InstEncoding[] condRnConstraints3 = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] condRnConstraints3 =
|
||||
[
|
||||
new(0xF0000000, 0xF0000000),
|
||||
new(0x000F0000, 0x000F0000),
|
||||
};
|
||||
new(0x000F0000, 0x000F0000)
|
||||
];
|
||||
|
||||
InstEncoding[] condMaskrConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] condMaskrConstraints =
|
||||
[
|
||||
new(0xF0000000, 0xF0000000),
|
||||
new(0x00000000, 0x004F0000),
|
||||
};
|
||||
new(0x00000000, 0x004F0000)
|
||||
];
|
||||
|
||||
InstEncoding[] rnConstraints = new InstEncoding[]
|
||||
{
|
||||
new(0x000F0000, 0x000F0000),
|
||||
};
|
||||
InstEncoding[] rnConstraints =
|
||||
[
|
||||
new(0x000F0000, 0x000F0000)
|
||||
];
|
||||
|
||||
InstEncoding[] vdVnVmConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] vdVnVmConstraints =
|
||||
[
|
||||
new(0x00001000, 0x00001000),
|
||||
new(0x00010000, 0x00010000),
|
||||
new(0x00000001, 0x00000001),
|
||||
};
|
||||
new(0x00000001, 0x00000001)
|
||||
];
|
||||
|
||||
InstEncoding[] condRaConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] condRaConstraints =
|
||||
[
|
||||
new(0xF0000000, 0xF0000000),
|
||||
new(0x0000F000, 0x0000F000),
|
||||
};
|
||||
new(0x0000F000, 0x0000F000)
|
||||
];
|
||||
|
||||
InstEncoding[] sizeQvdQvnQvmConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] sizeQvdQvnQvmConstraints =
|
||||
[
|
||||
new(0x00300000, 0x00300000),
|
||||
new(0x00001040, 0x00001040),
|
||||
new(0x00010040, 0x00010040),
|
||||
new(0x00000041, 0x00000041),
|
||||
};
|
||||
new(0x00000041, 0x00000041)
|
||||
];
|
||||
|
||||
InstEncoding[] sizeVdConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] sizeVdConstraints =
|
||||
[
|
||||
new(0x00300000, 0x00300000),
|
||||
new(0x00001000, 0x00001000),
|
||||
};
|
||||
new(0x00001000, 0x00001000)
|
||||
];
|
||||
|
||||
InstEncoding[] qvdQvnQvmConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] qvdQvnQvmConstraints =
|
||||
[
|
||||
new(0x00001040, 0x00001040),
|
||||
new(0x00010040, 0x00010040),
|
||||
new(0x00000041, 0x00000041),
|
||||
};
|
||||
new(0x00000041, 0x00000041)
|
||||
];
|
||||
|
||||
InstEncoding[] sizeQvdQvmConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] sizeQvdQvmConstraints =
|
||||
[
|
||||
new(0x000C0000, 0x000C0000),
|
||||
new(0x00001040, 0x00001040),
|
||||
new(0x00000041, 0x00000041),
|
||||
};
|
||||
new(0x00000041, 0x00000041)
|
||||
];
|
||||
|
||||
InstEncoding[] sizeVnVmConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] sizeVnVmConstraints =
|
||||
[
|
||||
new(0x00300000, 0x00300000),
|
||||
new(0x00010000, 0x00010000),
|
||||
new(0x00000001, 0x00000001),
|
||||
};
|
||||
new(0x00000001, 0x00000001)
|
||||
];
|
||||
|
||||
InstEncoding[] sizeVdOpvnConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] sizeVdOpvnConstraints =
|
||||
[
|
||||
new(0x00300000, 0x00300000),
|
||||
new(0x00001000, 0x00001000),
|
||||
new(0x00010100, 0x00010100),
|
||||
};
|
||||
new(0x00010100, 0x00010100)
|
||||
];
|
||||
|
||||
InstEncoding[] cmodeCmodeQvdConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] cmodeCmodeQvdConstraints =
|
||||
[
|
||||
new(0x00000000, 0x00000100),
|
||||
new(0x00000C00, 0x00000C00),
|
||||
new(0x00001040, 0x00001040),
|
||||
};
|
||||
new(0x00001040, 0x00001040)
|
||||
];
|
||||
|
||||
InstEncoding[] qvdQvnQvmOpConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] qvdQvnQvmOpConstraints =
|
||||
[
|
||||
new(0x00001040, 0x00001040),
|
||||
new(0x00010040, 0x00010040),
|
||||
new(0x00000041, 0x00000041),
|
||||
new(0x00000000, 0x00300000),
|
||||
};
|
||||
new(0x00000000, 0x00300000)
|
||||
];
|
||||
|
||||
InstEncoding[] qvdQvnQvmSizeConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] qvdQvnQvmSizeConstraints =
|
||||
[
|
||||
new(0x00001040, 0x00001040),
|
||||
new(0x00010040, 0x00010040),
|
||||
new(0x00000041, 0x00000041),
|
||||
new(0x00300000, 0x00300000),
|
||||
};
|
||||
new(0x00300000, 0x00300000)
|
||||
];
|
||||
|
||||
InstEncoding[] qvdQvnConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] qvdQvnConstraints =
|
||||
[
|
||||
new(0x00001040, 0x00001040),
|
||||
new(0x00010040, 0x00010040),
|
||||
};
|
||||
new(0x00010040, 0x00010040)
|
||||
];
|
||||
|
||||
InstEncoding[] qvdQvmConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] qvdQvmConstraints =
|
||||
[
|
||||
new(0x00001040, 0x00001040),
|
||||
new(0x00000041, 0x00000041),
|
||||
};
|
||||
new(0x00000041, 0x00000041)
|
||||
];
|
||||
|
||||
InstEncoding[] sizeConstraints = new InstEncoding[]
|
||||
{
|
||||
new(0x00000000, 0x00000300),
|
||||
};
|
||||
InstEncoding[] sizeConstraints =
|
||||
[
|
||||
new(0x00000000, 0x00000300)
|
||||
];
|
||||
|
||||
InstEncoding[] vmConstraints = new InstEncoding[]
|
||||
{
|
||||
new(0x00000001, 0x00000001),
|
||||
};
|
||||
InstEncoding[] vmConstraints =
|
||||
[
|
||||
new(0x00000001, 0x00000001)
|
||||
];
|
||||
|
||||
InstEncoding[] opvdOpvmConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] opvdOpvmConstraints =
|
||||
[
|
||||
new(0x00001100, 0x00001100),
|
||||
new(0x00000001, 0x00000101),
|
||||
};
|
||||
new(0x00000001, 0x00000101)
|
||||
];
|
||||
|
||||
InstEncoding[] imm6Opimm6Imm6QvdQvmConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] imm6Opimm6Imm6QvdQvmConstraints =
|
||||
[
|
||||
new(0x00000000, 0x00380000),
|
||||
new(0x00200000, 0x00300200),
|
||||
new(0x00000000, 0x00200000),
|
||||
new(0x00001040, 0x00001040),
|
||||
new(0x00000041, 0x00000041),
|
||||
};
|
||||
new(0x00000041, 0x00000041)
|
||||
];
|
||||
|
||||
InstEncoding[] condQvdEbConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] condQvdEbConstraints =
|
||||
[
|
||||
new(0xF0000000, 0xF0000000),
|
||||
new(0x00210000, 0x00210000),
|
||||
new(0x00400020, 0x00400020),
|
||||
};
|
||||
new(0x00400020, 0x00400020)
|
||||
];
|
||||
|
||||
InstEncoding[] imm4QvdConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] imm4QvdConstraints =
|
||||
[
|
||||
new(0x00000000, 0x00070000),
|
||||
new(0x00001040, 0x00001040),
|
||||
};
|
||||
new(0x00001040, 0x00001040)
|
||||
];
|
||||
|
||||
InstEncoding[] qvdQvnQvmQimm4Constraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] qvdQvnQvmQimm4Constraints =
|
||||
[
|
||||
new(0x00001040, 0x00001040),
|
||||
new(0x00010040, 0x00010040),
|
||||
new(0x00000041, 0x00000041),
|
||||
new(0x00000800, 0x00000840),
|
||||
};
|
||||
new(0x00000800, 0x00000840)
|
||||
];
|
||||
|
||||
InstEncoding[] qvdConstraints = new InstEncoding[]
|
||||
{
|
||||
new(0x00001040, 0x00001040),
|
||||
};
|
||||
InstEncoding[] qvdConstraints =
|
||||
[
|
||||
new(0x00001040, 0x00001040)
|
||||
];
|
||||
|
||||
InstEncoding[] vdVnConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] vdVnConstraints =
|
||||
[
|
||||
new(0x00001000, 0x00001000),
|
||||
new(0x00010000, 0x00010000),
|
||||
};
|
||||
new(0x00010000, 0x00010000)
|
||||
];
|
||||
|
||||
InstEncoding[] sizeConstraints2 = new InstEncoding[]
|
||||
{
|
||||
new(0x00000C00, 0x00000C00),
|
||||
};
|
||||
InstEncoding[] sizeConstraints2 =
|
||||
[
|
||||
new(0x00000C00, 0x00000C00)
|
||||
];
|
||||
|
||||
InstEncoding[] sizeIndexAlignIndexAlignConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] sizeIndexAlignIndexAlignConstraints =
|
||||
[
|
||||
new(0x00000C00, 0x00000C00),
|
||||
new(0x00000010, 0x00000030),
|
||||
new(0x00000020, 0x00000030),
|
||||
};
|
||||
new(0x00000020, 0x00000030)
|
||||
];
|
||||
|
||||
InstEncoding[] sizeSizeaConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] sizeSizeaConstraints =
|
||||
[
|
||||
new(0x000000C0, 0x000000C0),
|
||||
new(0x00000010, 0x000000D0),
|
||||
};
|
||||
new(0x00000010, 0x000000D0)
|
||||
];
|
||||
|
||||
InstEncoding[] alignConstraints = new InstEncoding[]
|
||||
{
|
||||
new(0x00000020, 0x00000020),
|
||||
};
|
||||
InstEncoding[] alignConstraints =
|
||||
[
|
||||
new(0x00000020, 0x00000020)
|
||||
];
|
||||
|
||||
InstEncoding[] alignConstraints2 = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] alignConstraints2 =
|
||||
[
|
||||
new(0x00000030, 0x00000030)
|
||||
];
|
||||
|
||||
InstEncoding[] sizeConstraints3 =
|
||||
[
|
||||
new(0x000000C0, 0x000000C0)
|
||||
];
|
||||
|
||||
InstEncoding[] alignSizeConstraints =
|
||||
[
|
||||
new(0x00000030, 0x00000030),
|
||||
};
|
||||
new(0x000000C0, 0x000000C0)
|
||||
];
|
||||
|
||||
InstEncoding[] sizeConstraints3 = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] sizeAConstraints =
|
||||
[
|
||||
new(0x000000C0, 0x000000C0),
|
||||
};
|
||||
new(0x00000010, 0x00000010)
|
||||
];
|
||||
|
||||
InstEncoding[] alignSizeConstraints = new InstEncoding[]
|
||||
{
|
||||
new(0x00000030, 0x00000030),
|
||||
InstEncoding[] sizeAlignConstraints =
|
||||
[
|
||||
new(0x000000C0, 0x000000C0),
|
||||
};
|
||||
new(0x00000020, 0x00000020)
|
||||
];
|
||||
|
||||
InstEncoding[] sizeAConstraints = new InstEncoding[]
|
||||
{
|
||||
new(0x000000C0, 0x000000C0),
|
||||
new(0x00000010, 0x00000010),
|
||||
};
|
||||
|
||||
InstEncoding[] sizeAlignConstraints = new InstEncoding[]
|
||||
{
|
||||
new(0x000000C0, 0x000000C0),
|
||||
new(0x00000020, 0x00000020),
|
||||
};
|
||||
|
||||
InstEncoding[] sizeIndexAlignConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] sizeIndexAlignConstraints =
|
||||
[
|
||||
new(0x00000C00, 0x00000C00),
|
||||
new(0x00000030, 0x00000030),
|
||||
};
|
||||
new(0x00000030, 0x00000030)
|
||||
];
|
||||
|
||||
InstEncoding[] sizeaConstraints = new InstEncoding[]
|
||||
{
|
||||
new(0x000000C0, 0x000000D0),
|
||||
};
|
||||
InstEncoding[] sizeaConstraints =
|
||||
[
|
||||
new(0x000000C0, 0x000000D0)
|
||||
];
|
||||
|
||||
InstEncoding[] sizeSizeVdConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] sizeSizeVdConstraints =
|
||||
[
|
||||
new(0x00300000, 0x00300000),
|
||||
new(0x00000000, 0x00300000),
|
||||
new(0x00001000, 0x00001000),
|
||||
};
|
||||
new(0x00001000, 0x00001000)
|
||||
];
|
||||
|
||||
InstEncoding[] sizeQvdQvnConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] sizeQvdQvnConstraints =
|
||||
[
|
||||
new(0x00300000, 0x00300000),
|
||||
new(0x01001000, 0x01001000),
|
||||
new(0x01010000, 0x01010000),
|
||||
};
|
||||
new(0x01010000, 0x01010000)
|
||||
];
|
||||
|
||||
InstEncoding[] imm3hImm3hImm3hImm3hImm3hVdConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] imm3hImm3hImm3hImm3hImm3hVdConstraints =
|
||||
[
|
||||
new(0x00000000, 0x00380000),
|
||||
new(0x00180000, 0x00380000),
|
||||
new(0x00280000, 0x00380000),
|
||||
new(0x00300000, 0x00380000),
|
||||
new(0x00380000, 0x00380000),
|
||||
new(0x00001000, 0x00001000),
|
||||
};
|
||||
new(0x00001000, 0x00001000)
|
||||
];
|
||||
|
||||
InstEncoding[] sizeVmConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] sizeVmConstraints =
|
||||
[
|
||||
new(0x000C0000, 0x000C0000),
|
||||
new(0x00000001, 0x00000001),
|
||||
};
|
||||
new(0x00000001, 0x00000001)
|
||||
];
|
||||
|
||||
InstEncoding[] condOpc1opc2Constraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] condOpc1opc2Constraints =
|
||||
[
|
||||
new(0xF0000000, 0xF0000000),
|
||||
new(0x00000040, 0x00400060),
|
||||
};
|
||||
new(0x00000040, 0x00400060)
|
||||
];
|
||||
|
||||
InstEncoding[] condUopc1opc2Uopc1opc2Constraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] condUopc1opc2Uopc1opc2Constraints =
|
||||
[
|
||||
new(0xF0000000, 0xF0000000),
|
||||
new(0x00800000, 0x00C00060),
|
||||
new(0x00000040, 0x00400060),
|
||||
};
|
||||
new(0x00000040, 0x00400060)
|
||||
];
|
||||
|
||||
InstEncoding[] sizeOpuOpsizeVdConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] sizeOpuOpsizeVdConstraints =
|
||||
[
|
||||
new(0x00300000, 0x00300000),
|
||||
new(0x01000200, 0x01000200),
|
||||
new(0x00100200, 0x00300200),
|
||||
new(0x00001000, 0x00001000),
|
||||
};
|
||||
new(0x00001000, 0x00001000)
|
||||
];
|
||||
|
||||
InstEncoding[] sizeOpsizeOpsizeQvdQvnQvmConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] sizeOpsizeOpsizeQvdQvnQvmConstraints =
|
||||
[
|
||||
new(0x00300000, 0x00300000),
|
||||
new(0x01100000, 0x01300000),
|
||||
new(0x01200000, 0x01300000),
|
||||
new(0x00001040, 0x00001040),
|
||||
new(0x00010040, 0x00010040),
|
||||
new(0x00000041, 0x00000041),
|
||||
};
|
||||
new(0x00000041, 0x00000041)
|
||||
];
|
||||
|
||||
InstEncoding[] cmodeQvdConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] cmodeQvdConstraints =
|
||||
[
|
||||
new(0x00000E00, 0x00000E00),
|
||||
new(0x00001040, 0x00001040),
|
||||
};
|
||||
new(0x00001040, 0x00001040)
|
||||
];
|
||||
|
||||
InstEncoding[] qConstraints = new InstEncoding[]
|
||||
{
|
||||
new(0x00000040, 0x00000040),
|
||||
};
|
||||
InstEncoding[] qConstraints =
|
||||
[
|
||||
new(0x00000040, 0x00000040)
|
||||
];
|
||||
|
||||
InstEncoding[] sizeQConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] sizeQConstraints =
|
||||
[
|
||||
new(0x00300000, 0x00300000),
|
||||
new(0x00000040, 0x00000040),
|
||||
};
|
||||
new(0x00000040, 0x00000040)
|
||||
];
|
||||
|
||||
InstEncoding[] sizeConstraints4 = new InstEncoding[]
|
||||
{
|
||||
new(0x00300000, 0x00300000),
|
||||
};
|
||||
InstEncoding[] sizeConstraints4 =
|
||||
[
|
||||
new(0x00300000, 0x00300000)
|
||||
];
|
||||
|
||||
InstEncoding[] qvdQvnQvmSizeSizeConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] qvdQvnQvmSizeSizeConstraints =
|
||||
[
|
||||
new(0x00001040, 0x00001040),
|
||||
new(0x00010040, 0x00010040),
|
||||
new(0x00000041, 0x00000041),
|
||||
new(0x00000000, 0x00300000),
|
||||
new(0x00300000, 0x00300000),
|
||||
};
|
||||
new(0x00300000, 0x00300000)
|
||||
];
|
||||
|
||||
InstEncoding[] sizeSizeQvdQvnConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] sizeSizeQvdQvnConstraints =
|
||||
[
|
||||
new(0x00300000, 0x00300000),
|
||||
new(0x00000000, 0x00300000),
|
||||
new(0x01001000, 0x01001000),
|
||||
new(0x01010000, 0x01010000),
|
||||
};
|
||||
new(0x01010000, 0x01010000)
|
||||
];
|
||||
|
||||
InstEncoding[] opSizeVmConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] opSizeVmConstraints =
|
||||
[
|
||||
new(0x00000000, 0x000000C0),
|
||||
new(0x000C0000, 0x000C0000),
|
||||
new(0x00000001, 0x00000001),
|
||||
};
|
||||
new(0x00000001, 0x00000001)
|
||||
];
|
||||
|
||||
InstEncoding[] qvdQvmQvnConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] qvdQvmQvnConstraints =
|
||||
[
|
||||
new(0x00001040, 0x00001040),
|
||||
new(0x00000041, 0x00000041),
|
||||
new(0x00010040, 0x00010040),
|
||||
};
|
||||
new(0x00010040, 0x00010040)
|
||||
];
|
||||
|
||||
InstEncoding[] imm6UopVmConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] imm6UopVmConstraints =
|
||||
[
|
||||
new(0x00000000, 0x00380000),
|
||||
new(0x00000000, 0x01000100),
|
||||
new(0x00000001, 0x00000001),
|
||||
};
|
||||
new(0x00000001, 0x00000001)
|
||||
];
|
||||
|
||||
InstEncoding[] imm6lUopQvdQvmConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] imm6lUopQvdQvmConstraints =
|
||||
[
|
||||
new(0x00000000, 0x00380080),
|
||||
new(0x00000000, 0x01000100),
|
||||
new(0x00001040, 0x00001040),
|
||||
new(0x00000041, 0x00000041),
|
||||
};
|
||||
new(0x00000041, 0x00000041)
|
||||
];
|
||||
|
||||
InstEncoding[] qvdQvmSizeSizeConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] qvdQvmSizeSizeConstraints =
|
||||
[
|
||||
new(0x00001040, 0x00001040),
|
||||
new(0x00000041, 0x00000041),
|
||||
new(0x00000000, 0x000C0000),
|
||||
new(0x000C0000, 0x000C0000),
|
||||
};
|
||||
new(0x000C0000, 0x000C0000)
|
||||
];
|
||||
|
||||
InstEncoding[] sizeSizeSizeQvdQvmConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] sizeSizeSizeQvdQvmConstraints =
|
||||
[
|
||||
new(0x00040000, 0x000C0000),
|
||||
new(0x00080000, 0x000C0000),
|
||||
new(0x000C0000, 0x000C0000),
|
||||
new(0x00001040, 0x00001040),
|
||||
new(0x00000041, 0x00000041),
|
||||
};
|
||||
new(0x00000041, 0x00000041)
|
||||
];
|
||||
|
||||
InstEncoding[] sizeSizeQvdQvmConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] sizeSizeQvdQvmConstraints =
|
||||
[
|
||||
new(0x00080000, 0x000C0000),
|
||||
new(0x000C0000, 0x000C0000),
|
||||
new(0x00001040, 0x00001040),
|
||||
new(0x00000041, 0x00000041),
|
||||
};
|
||||
new(0x00000041, 0x00000041)
|
||||
];
|
||||
|
||||
InstEncoding[] imm6lQvdQvmConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] imm6lQvdQvmConstraints =
|
||||
[
|
||||
new(0x00000000, 0x00380080),
|
||||
new(0x00001040, 0x00001040),
|
||||
new(0x00000041, 0x00000041),
|
||||
};
|
||||
new(0x00000041, 0x00000041)
|
||||
];
|
||||
|
||||
InstEncoding[] imm6VmConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] imm6VmConstraints =
|
||||
[
|
||||
new(0x00000000, 0x00380000),
|
||||
new(0x00000001, 0x00000001),
|
||||
};
|
||||
new(0x00000001, 0x00000001)
|
||||
];
|
||||
|
||||
InstEncoding[] imm6VdImm6Imm6Imm6Constraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] imm6VdImm6Imm6Imm6Constraints =
|
||||
[
|
||||
new(0x00000000, 0x00380000),
|
||||
new(0x00001000, 0x00001000),
|
||||
new(0x00080000, 0x003F0000),
|
||||
new(0x00100000, 0x003F0000),
|
||||
new(0x00200000, 0x003F0000),
|
||||
};
|
||||
new(0x00200000, 0x003F0000)
|
||||
];
|
||||
|
||||
InstEncoding[] sizeVdConstraints2 = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] sizeVdConstraints2 =
|
||||
[
|
||||
new(0x000C0000, 0x000C0000),
|
||||
new(0x00001000, 0x00001000),
|
||||
};
|
||||
new(0x00001000, 0x00001000)
|
||||
];
|
||||
|
||||
InstEncoding[] sizeQsizeQvdQvmConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] sizeQsizeQvdQvmConstraints =
|
||||
[
|
||||
new(0x000C0000, 0x000C0000),
|
||||
new(0x00080000, 0x000C0040),
|
||||
new(0x00001040, 0x00001040),
|
||||
new(0x00000041, 0x00000041),
|
||||
};
|
||||
new(0x00000041, 0x00000041)
|
||||
];
|
||||
|
||||
List<InstInfoForTable> insts = new()
|
||||
{
|
||||
List<InstInfoForTable> insts =
|
||||
[
|
||||
new(0x02A00000, 0x0FE00000, condConstraints, InstName.AdcI, T.AdcIA1, IsaVersion.v80, InstFlags.CondRd),
|
||||
new(0x00A00000, 0x0FE00010, condConstraints, InstName.AdcR, T.AdcRA1, IsaVersion.v80, InstFlags.CondRd),
|
||||
new(0x00A00010, 0x0FE00090, condConstraints, InstName.AdcRr, T.AdcRrA1, IsaVersion.v80, InstFlags.CondRd),
|
||||
@@ -1176,7 +1176,7 @@ namespace Ryujinx.Cpu.LightningJit.Arm32
|
||||
new(0x0320F002, 0x0FFFFFFF, condConstraints, InstName.Wfe, T.WfeA1, IsaVersion.v80, InstFlags.Cond),
|
||||
new(0x0320F003, 0x0FFFFFFF, condConstraints, InstName.Wfi, T.WfiA1, IsaVersion.v80, InstFlags.Cond),
|
||||
new(0x0320F001, 0x0FFFFFFF, condConstraints, InstName.Yield, T.YieldA1, IsaVersion.v80, InstFlags.Cond),
|
||||
};
|
||||
];
|
||||
|
||||
_table = new(insts);
|
||||
}
|
||||
|
||||
@@ -9,48 +9,49 @@ namespace Ryujinx.Cpu.LightningJit.Arm32
|
||||
|
||||
static InstTableT16()
|
||||
{
|
||||
InstEncoding[] rmRdndnConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] rmRdndnConstraints =
|
||||
[
|
||||
new(0x00680000, 0x00780000),
|
||||
new(0x00850000, 0x00870000),
|
||||
};
|
||||
new(0x00850000, 0x00870000)
|
||||
];
|
||||
|
||||
InstEncoding[] rmConstraints = new InstEncoding[]
|
||||
{
|
||||
new(0x00680000, 0x00780000),
|
||||
};
|
||||
InstEncoding[] rmConstraints =
|
||||
[
|
||||
new(0x00680000, 0x00780000)
|
||||
];
|
||||
|
||||
InstEncoding[] condCondConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] condCondConstraints =
|
||||
[
|
||||
new(0x0E000000, 0x0F000000),
|
||||
new(0x0F000000, 0x0F000000),
|
||||
};
|
||||
new(0x0F000000, 0x0F000000)
|
||||
];
|
||||
|
||||
InstEncoding[] maskConstraints = new InstEncoding[]
|
||||
{
|
||||
new(0x00000000, 0x000F0000),
|
||||
};
|
||||
InstEncoding[] maskConstraints =
|
||||
[
|
||||
new(0x00000000, 0x000F0000)
|
||||
];
|
||||
|
||||
InstEncoding[] opConstraints = new InstEncoding[]
|
||||
{
|
||||
new(0x18000000, 0x18000000),
|
||||
};
|
||||
InstEncoding[] opConstraints =
|
||||
[
|
||||
new(0x18000000, 0x18000000)
|
||||
];
|
||||
|
||||
InstEncoding[] opOpOpOpConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] opOpOpOpConstraints =
|
||||
[
|
||||
new(0x00000000, 0x03C00000),
|
||||
new(0x00400000, 0x03C00000),
|
||||
new(0x01400000, 0x03C00000),
|
||||
new(0x01800000, 0x03C00000),
|
||||
};
|
||||
new(0x01800000, 0x03C00000)
|
||||
];
|
||||
|
||||
List<InstInfoForTable> insts = new()
|
||||
{
|
||||
List<InstInfoForTable> insts =
|
||||
[
|
||||
new(0x41400000, 0xFFC00000, InstName.AdcR, T.AdcRT1, IsaVersion.v80, InstFlags.Rdn),
|
||||
new(0x1C000000, 0xFE000000, InstName.AddI, T.AddIT1, IsaVersion.v80, InstFlags.Rd),
|
||||
new(0x30000000, 0xF8000000, InstName.AddI, T.AddIT2, IsaVersion.v80, InstFlags.Rdn),
|
||||
new(0x18000000, 0xFE000000, InstName.AddR, T.AddRT1, IsaVersion.v80, InstFlags.Rd),
|
||||
new(0x44000000, 0xFF000000, rmRdndnConstraints, InstName.AddR, T.AddRT2, IsaVersion.v80, InstFlags.RdnDn),
|
||||
new(0x44000000, 0xFF000000, rmRdndnConstraints, InstName.AddR, T.AddRT2, IsaVersion.v80,
|
||||
InstFlags.RdnDn),
|
||||
new(0xA8000000, 0xF8000000, InstName.AddSpI, T.AddSpIT1, IsaVersion.v80, InstFlags.RdRd16),
|
||||
new(0xB0000000, 0xFF800000, InstName.AddSpI, T.AddSpIT2, IsaVersion.v80, InstFlags.None),
|
||||
new(0x44680000, 0xFF780000, InstName.AddSpR, T.AddSpRT1, IsaVersion.v80, InstFlags.None),
|
||||
@@ -86,7 +87,8 @@ namespace Ryujinx.Cpu.LightningJit.Arm32
|
||||
new(0x20000000, 0xF8000000, InstName.MovI, T.MovIT1, IsaVersion.v80, InstFlags.RdRd16),
|
||||
new(0x46000000, 0xFF000000, InstName.MovR, T.MovRT1, IsaVersion.v80, InstFlags.Rd),
|
||||
new(0x00000000, 0xE0000000, opConstraints, InstName.MovR, T.MovRT2, IsaVersion.v80, InstFlags.Rd),
|
||||
new(0x40000000, 0xFE000000, opOpOpOpConstraints, InstName.MovRr, T.MovRrT1, IsaVersion.v80, InstFlags.None),
|
||||
new(0x40000000, 0xFE000000, opOpOpOpConstraints, InstName.MovRr, T.MovRrT1, IsaVersion.v80,
|
||||
InstFlags.None),
|
||||
new(0x43400000, 0xFFC00000, InstName.Mul, T.MulT1, IsaVersion.v80, InstFlags.None),
|
||||
new(0x43C00000, 0xFFC00000, InstName.MvnR, T.MvnRT1, IsaVersion.v80, InstFlags.Rd),
|
||||
new(0xBF000000, 0xFFFF0000, InstName.Nop, T.NopT1, IsaVersion.v80, InstFlags.None),
|
||||
@@ -99,7 +101,8 @@ namespace Ryujinx.Cpu.LightningJit.Arm32
|
||||
new(0x42400000, 0xFFC00000, InstName.RsbI, T.RsbIT1, IsaVersion.v80, InstFlags.Rd),
|
||||
new(0x41800000, 0xFFC00000, InstName.SbcR, T.SbcRT1, IsaVersion.v80, InstFlags.Rdn),
|
||||
new(0xB6500000, 0xFFF70000, InstName.Setend, T.SetendT1, IsaVersion.v80, InstFlags.None),
|
||||
new(0xB6100000, 0xFFF70000, InstName.Setpan, T.SetpanT1, IsaVersion.v81, IsaFeature.FeatPan, InstFlags.None),
|
||||
new(0xB6100000, 0xFFF70000, InstName.Setpan, T.SetpanT1, IsaVersion.v81, IsaFeature.FeatPan,
|
||||
InstFlags.None),
|
||||
new(0xBF400000, 0xFFFF0000, InstName.Sev, T.SevT1, IsaVersion.v80, InstFlags.None),
|
||||
new(0xBF500000, 0xFFFF0000, InstName.Sevl, T.SevlT1, IsaVersion.v80, InstFlags.None),
|
||||
new(0xC0000000, 0xF8000000, InstName.Stm, T.StmT1, IsaVersion.v80, InstFlags.RlistRead),
|
||||
@@ -123,8 +126,8 @@ namespace Ryujinx.Cpu.LightningJit.Arm32
|
||||
new(0xB2800000, 0xFFC00000, InstName.Uxth, T.UxthT1, IsaVersion.v80, InstFlags.Rd),
|
||||
new(0xBF200000, 0xFFFF0000, InstName.Wfe, T.WfeT1, IsaVersion.v80, InstFlags.None),
|
||||
new(0xBF300000, 0xFFFF0000, InstName.Wfi, T.WfiT1, IsaVersion.v80, InstFlags.None),
|
||||
new(0xBF100000, 0xFFFF0000, InstName.Yield, T.YieldT1, IsaVersion.v80, InstFlags.None),
|
||||
};
|
||||
new(0xBF100000, 0xFFFF0000, InstName.Yield, T.YieldT1, IsaVersion.v80, InstFlags.None)
|
||||
];
|
||||
|
||||
_table = new(insts);
|
||||
}
|
||||
|
||||
@@ -9,525 +9,525 @@ namespace Ryujinx.Cpu.LightningJit.Arm32
|
||||
|
||||
static InstTableT32()
|
||||
{
|
||||
InstEncoding[] rnRdsConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] rnRdsConstraints =
|
||||
[
|
||||
new(0x000D0000, 0x000F0000),
|
||||
new(0x00100F00, 0x00100F00),
|
||||
};
|
||||
new(0x00100F00, 0x00100F00)
|
||||
];
|
||||
|
||||
InstEncoding[] rnRnConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] rnRnConstraints =
|
||||
[
|
||||
new(0x000D0000, 0x000F0000),
|
||||
new(0x000F0000, 0x000F0000),
|
||||
};
|
||||
new(0x000F0000, 0x000F0000)
|
||||
];
|
||||
|
||||
InstEncoding[] rdsConstraints = new InstEncoding[]
|
||||
{
|
||||
new(0x00100F00, 0x00100F00),
|
||||
};
|
||||
InstEncoding[] rdsConstraints =
|
||||
[
|
||||
new(0x00100F00, 0x00100F00)
|
||||
];
|
||||
|
||||
InstEncoding[] vdVmConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] vdVmConstraints =
|
||||
[
|
||||
new(0x00001000, 0x00001000),
|
||||
new(0x00000001, 0x00000001),
|
||||
};
|
||||
new(0x00000001, 0x00000001)
|
||||
];
|
||||
|
||||
InstEncoding[] condCondCondConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] condCondCondConstraints =
|
||||
[
|
||||
new(0x03800000, 0x03C00000),
|
||||
new(0x03C00000, 0x03C00000),
|
||||
new(0x03800000, 0x03800000),
|
||||
};
|
||||
new(0x03800000, 0x03800000)
|
||||
];
|
||||
|
||||
InstEncoding[] rnConstraints = new InstEncoding[]
|
||||
{
|
||||
new(0x000F0000, 0x000F0000),
|
||||
};
|
||||
InstEncoding[] rnConstraints =
|
||||
[
|
||||
new(0x000F0000, 0x000F0000)
|
||||
];
|
||||
|
||||
InstEncoding[] hConstraints = new InstEncoding[]
|
||||
{
|
||||
new(0x00000001, 0x00000001),
|
||||
};
|
||||
InstEncoding[] hConstraints =
|
||||
[
|
||||
new(0x00000001, 0x00000001)
|
||||
];
|
||||
|
||||
InstEncoding[] imodmConstraints = new InstEncoding[]
|
||||
{
|
||||
new(0x00000000, 0x00000700),
|
||||
};
|
||||
InstEncoding[] imodmConstraints =
|
||||
[
|
||||
new(0x00000000, 0x00000700)
|
||||
];
|
||||
|
||||
InstEncoding[] optionConstraints = new InstEncoding[]
|
||||
{
|
||||
new(0x00000000, 0x0000000F),
|
||||
};
|
||||
InstEncoding[] optionConstraints =
|
||||
[
|
||||
new(0x00000000, 0x0000000F)
|
||||
];
|
||||
|
||||
InstEncoding[] puwPwPuwPuwConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] puwPwPuwPuwConstraints =
|
||||
[
|
||||
new(0x00000000, 0x01A00000),
|
||||
new(0x01000000, 0x01200000),
|
||||
new(0x00200000, 0x01A00000),
|
||||
new(0x01A00000, 0x01A00000),
|
||||
};
|
||||
new(0x01A00000, 0x01A00000)
|
||||
];
|
||||
|
||||
InstEncoding[] rnPuwConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] rnPuwConstraints =
|
||||
[
|
||||
new(0x000F0000, 0x000F0000),
|
||||
new(0x00000000, 0x01A00000),
|
||||
};
|
||||
new(0x00000000, 0x01A00000)
|
||||
];
|
||||
|
||||
InstEncoding[] puwConstraints = new InstEncoding[]
|
||||
{
|
||||
new(0x00000000, 0x01A00000),
|
||||
};
|
||||
InstEncoding[] puwConstraints =
|
||||
[
|
||||
new(0x00000000, 0x01A00000)
|
||||
];
|
||||
|
||||
InstEncoding[] rnRtConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] rnRtConstraints =
|
||||
[
|
||||
new(0x000F0000, 0x000F0000),
|
||||
new(0x0000F000, 0x0000F000),
|
||||
};
|
||||
new(0x0000F000, 0x0000F000)
|
||||
];
|
||||
|
||||
InstEncoding[] rnRtpuwPuwPwConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] rnRtpuwPuwPwConstraints =
|
||||
[
|
||||
new(0x000F0000, 0x000F0000),
|
||||
new(0x0000F400, 0x0000F700),
|
||||
new(0x00000600, 0x00000700),
|
||||
new(0x00000000, 0x00000500),
|
||||
};
|
||||
new(0x00000000, 0x00000500)
|
||||
];
|
||||
|
||||
InstEncoding[] rtConstraints = new InstEncoding[]
|
||||
{
|
||||
new(0x0000F000, 0x0000F000),
|
||||
};
|
||||
InstEncoding[] rtConstraints =
|
||||
[
|
||||
new(0x0000F000, 0x0000F000)
|
||||
];
|
||||
|
||||
InstEncoding[] rnPwConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] rnPwConstraints =
|
||||
[
|
||||
new(0x000F0000, 0x000F0000),
|
||||
new(0x00000000, 0x01200000),
|
||||
};
|
||||
new(0x00000000, 0x01200000)
|
||||
];
|
||||
|
||||
InstEncoding[] pwConstraints = new InstEncoding[]
|
||||
{
|
||||
new(0x00000000, 0x01200000),
|
||||
};
|
||||
InstEncoding[] pwConstraints =
|
||||
[
|
||||
new(0x00000000, 0x01200000)
|
||||
];
|
||||
|
||||
InstEncoding[] rnPuwPwConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] rnPuwPwConstraints =
|
||||
[
|
||||
new(0x000F0000, 0x000F0000),
|
||||
new(0x00000600, 0x00000700),
|
||||
new(0x00000000, 0x00000500),
|
||||
};
|
||||
new(0x00000000, 0x00000500)
|
||||
];
|
||||
|
||||
InstEncoding[] raConstraints = new InstEncoding[]
|
||||
{
|
||||
new(0x0000F000, 0x0000F000),
|
||||
};
|
||||
InstEncoding[] raConstraints =
|
||||
[
|
||||
new(0x0000F000, 0x0000F000)
|
||||
];
|
||||
|
||||
InstEncoding[] sTConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] sTConstraints =
|
||||
[
|
||||
new(0x00100000, 0x00100000),
|
||||
new(0x00000010, 0x00000010),
|
||||
};
|
||||
new(0x00000010, 0x00000010)
|
||||
];
|
||||
|
||||
InstEncoding[] vdVnVmConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] vdVnVmConstraints =
|
||||
[
|
||||
new(0x00001000, 0x00001000),
|
||||
new(0x00010000, 0x00010000),
|
||||
new(0x00000001, 0x00000001),
|
||||
};
|
||||
new(0x00000001, 0x00000001)
|
||||
];
|
||||
|
||||
InstEncoding[] shimm2imm3Constraints = new InstEncoding[]
|
||||
{
|
||||
new(0x00200000, 0x002070C0),
|
||||
};
|
||||
InstEncoding[] shimm2imm3Constraints =
|
||||
[
|
||||
new(0x00200000, 0x002070C0)
|
||||
];
|
||||
|
||||
InstEncoding[] rnimm8Constraints = new InstEncoding[]
|
||||
{
|
||||
new(0x000E0000, 0x000F00FF),
|
||||
};
|
||||
InstEncoding[] rnimm8Constraints =
|
||||
[
|
||||
new(0x000E0000, 0x000F00FF)
|
||||
];
|
||||
|
||||
InstEncoding[] sizeQvdQvnQvmConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] sizeQvdQvnQvmConstraints =
|
||||
[
|
||||
new(0x00300000, 0x00300000),
|
||||
new(0x00001040, 0x00001040),
|
||||
new(0x00010040, 0x00010040),
|
||||
new(0x00000041, 0x00000041),
|
||||
};
|
||||
new(0x00000041, 0x00000041)
|
||||
];
|
||||
|
||||
InstEncoding[] sizeVdConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] sizeVdConstraints =
|
||||
[
|
||||
new(0x00300000, 0x00300000),
|
||||
new(0x00001000, 0x00001000),
|
||||
};
|
||||
new(0x00001000, 0x00001000)
|
||||
];
|
||||
|
||||
InstEncoding[] qvdQvnQvmConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] qvdQvnQvmConstraints =
|
||||
[
|
||||
new(0x00001040, 0x00001040),
|
||||
new(0x00010040, 0x00010040),
|
||||
new(0x00000041, 0x00000041),
|
||||
};
|
||||
new(0x00000041, 0x00000041)
|
||||
];
|
||||
|
||||
InstEncoding[] sizeQvdQvmConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] sizeQvdQvmConstraints =
|
||||
[
|
||||
new(0x000C0000, 0x000C0000),
|
||||
new(0x00001040, 0x00001040),
|
||||
new(0x00000041, 0x00000041),
|
||||
};
|
||||
new(0x00000041, 0x00000041)
|
||||
];
|
||||
|
||||
InstEncoding[] sizeVnVmConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] sizeVnVmConstraints =
|
||||
[
|
||||
new(0x00300000, 0x00300000),
|
||||
new(0x00010000, 0x00010000),
|
||||
new(0x00000001, 0x00000001),
|
||||
};
|
||||
new(0x00000001, 0x00000001)
|
||||
];
|
||||
|
||||
InstEncoding[] sizeVdOpvnConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] sizeVdOpvnConstraints =
|
||||
[
|
||||
new(0x00300000, 0x00300000),
|
||||
new(0x00001000, 0x00001000),
|
||||
new(0x00010100, 0x00010100),
|
||||
};
|
||||
new(0x00010100, 0x00010100)
|
||||
];
|
||||
|
||||
InstEncoding[] cmodeCmodeQvdConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] cmodeCmodeQvdConstraints =
|
||||
[
|
||||
new(0x00000000, 0x00000100),
|
||||
new(0x00000C00, 0x00000C00),
|
||||
new(0x00001040, 0x00001040),
|
||||
};
|
||||
new(0x00001040, 0x00001040)
|
||||
];
|
||||
|
||||
InstEncoding[] qvdQvnQvmOpConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] qvdQvnQvmOpConstraints =
|
||||
[
|
||||
new(0x00001040, 0x00001040),
|
||||
new(0x00010040, 0x00010040),
|
||||
new(0x00000041, 0x00000041),
|
||||
new(0x00000000, 0x00300000),
|
||||
};
|
||||
new(0x00000000, 0x00300000)
|
||||
];
|
||||
|
||||
InstEncoding[] qvdQvnQvmSizeConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] qvdQvnQvmSizeConstraints =
|
||||
[
|
||||
new(0x00001040, 0x00001040),
|
||||
new(0x00010040, 0x00010040),
|
||||
new(0x00000041, 0x00000041),
|
||||
new(0x00300000, 0x00300000),
|
||||
};
|
||||
new(0x00300000, 0x00300000)
|
||||
];
|
||||
|
||||
InstEncoding[] qvdQvnConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] qvdQvnConstraints =
|
||||
[
|
||||
new(0x00001040, 0x00001040),
|
||||
new(0x00010040, 0x00010040),
|
||||
};
|
||||
new(0x00010040, 0x00010040)
|
||||
];
|
||||
|
||||
InstEncoding[] qvdQvmConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] qvdQvmConstraints =
|
||||
[
|
||||
new(0x00001040, 0x00001040),
|
||||
new(0x00000041, 0x00000041),
|
||||
};
|
||||
new(0x00000041, 0x00000041)
|
||||
];
|
||||
|
||||
InstEncoding[] sizeConstraints = new InstEncoding[]
|
||||
{
|
||||
new(0x00000000, 0x00000300),
|
||||
};
|
||||
InstEncoding[] sizeConstraints =
|
||||
[
|
||||
new(0x00000000, 0x00000300)
|
||||
];
|
||||
|
||||
InstEncoding[] vmConstraints = new InstEncoding[]
|
||||
{
|
||||
new(0x00000001, 0x00000001),
|
||||
};
|
||||
InstEncoding[] vmConstraints =
|
||||
[
|
||||
new(0x00000001, 0x00000001)
|
||||
];
|
||||
|
||||
InstEncoding[] opvdOpvmConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] opvdOpvmConstraints =
|
||||
[
|
||||
new(0x00001100, 0x00001100),
|
||||
new(0x00000001, 0x00000101),
|
||||
};
|
||||
new(0x00000001, 0x00000101)
|
||||
];
|
||||
|
||||
InstEncoding[] imm6Opimm6Imm6QvdQvmConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] imm6Opimm6Imm6QvdQvmConstraints =
|
||||
[
|
||||
new(0x00000000, 0x00380000),
|
||||
new(0x00200000, 0x00300200),
|
||||
new(0x00000000, 0x00200000),
|
||||
new(0x00001040, 0x00001040),
|
||||
new(0x00000041, 0x00000041),
|
||||
};
|
||||
new(0x00000041, 0x00000041)
|
||||
];
|
||||
|
||||
InstEncoding[] qvdEbConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] qvdEbConstraints =
|
||||
[
|
||||
new(0x00210000, 0x00210000),
|
||||
new(0x00400020, 0x00400020),
|
||||
};
|
||||
new(0x00400020, 0x00400020)
|
||||
];
|
||||
|
||||
InstEncoding[] imm4QvdConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] imm4QvdConstraints =
|
||||
[
|
||||
new(0x00000000, 0x00070000),
|
||||
new(0x00001040, 0x00001040),
|
||||
};
|
||||
new(0x00001040, 0x00001040)
|
||||
];
|
||||
|
||||
InstEncoding[] qvdQvnQvmQimm4Constraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] qvdQvnQvmQimm4Constraints =
|
||||
[
|
||||
new(0x00001040, 0x00001040),
|
||||
new(0x00010040, 0x00010040),
|
||||
new(0x00000041, 0x00000041),
|
||||
new(0x00000800, 0x00000840),
|
||||
};
|
||||
new(0x00000800, 0x00000840)
|
||||
];
|
||||
|
||||
InstEncoding[] qvdConstraints = new InstEncoding[]
|
||||
{
|
||||
new(0x00001040, 0x00001040),
|
||||
};
|
||||
InstEncoding[] qvdConstraints =
|
||||
[
|
||||
new(0x00001040, 0x00001040)
|
||||
];
|
||||
|
||||
InstEncoding[] vdVnConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] vdVnConstraints =
|
||||
[
|
||||
new(0x00001000, 0x00001000),
|
||||
new(0x00010000, 0x00010000),
|
||||
};
|
||||
new(0x00010000, 0x00010000)
|
||||
];
|
||||
|
||||
InstEncoding[] sizeConstraints2 = new InstEncoding[]
|
||||
{
|
||||
new(0x00000C00, 0x00000C00),
|
||||
};
|
||||
InstEncoding[] sizeConstraints2 =
|
||||
[
|
||||
new(0x00000C00, 0x00000C00)
|
||||
];
|
||||
|
||||
InstEncoding[] sizeIndexAlignIndexAlignConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] sizeIndexAlignIndexAlignConstraints =
|
||||
[
|
||||
new(0x00000C00, 0x00000C00),
|
||||
new(0x00000010, 0x00000030),
|
||||
new(0x00000020, 0x00000030),
|
||||
};
|
||||
new(0x00000020, 0x00000030)
|
||||
];
|
||||
|
||||
InstEncoding[] sizeSizeaConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] sizeSizeaConstraints =
|
||||
[
|
||||
new(0x000000C0, 0x000000C0),
|
||||
new(0x00000010, 0x000000D0),
|
||||
};
|
||||
new(0x00000010, 0x000000D0)
|
||||
];
|
||||
|
||||
InstEncoding[] alignConstraints = new InstEncoding[]
|
||||
{
|
||||
new(0x00000020, 0x00000020),
|
||||
};
|
||||
InstEncoding[] alignConstraints =
|
||||
[
|
||||
new(0x00000020, 0x00000020)
|
||||
];
|
||||
|
||||
InstEncoding[] alignConstraints2 = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] alignConstraints2 =
|
||||
[
|
||||
new(0x00000030, 0x00000030)
|
||||
];
|
||||
|
||||
InstEncoding[] sizeConstraints3 =
|
||||
[
|
||||
new(0x000000C0, 0x000000C0)
|
||||
];
|
||||
|
||||
InstEncoding[] alignSizeConstraints =
|
||||
[
|
||||
new(0x00000030, 0x00000030),
|
||||
};
|
||||
new(0x000000C0, 0x000000C0)
|
||||
];
|
||||
|
||||
InstEncoding[] sizeConstraints3 = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] sizeAConstraints =
|
||||
[
|
||||
new(0x000000C0, 0x000000C0),
|
||||
};
|
||||
new(0x00000010, 0x00000010)
|
||||
];
|
||||
|
||||
InstEncoding[] alignSizeConstraints = new InstEncoding[]
|
||||
{
|
||||
new(0x00000030, 0x00000030),
|
||||
InstEncoding[] sizeAlignConstraints =
|
||||
[
|
||||
new(0x000000C0, 0x000000C0),
|
||||
};
|
||||
new(0x00000020, 0x00000020)
|
||||
];
|
||||
|
||||
InstEncoding[] sizeAConstraints = new InstEncoding[]
|
||||
{
|
||||
new(0x000000C0, 0x000000C0),
|
||||
new(0x00000010, 0x00000010),
|
||||
};
|
||||
|
||||
InstEncoding[] sizeAlignConstraints = new InstEncoding[]
|
||||
{
|
||||
new(0x000000C0, 0x000000C0),
|
||||
new(0x00000020, 0x00000020),
|
||||
};
|
||||
|
||||
InstEncoding[] sizeIndexAlignConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] sizeIndexAlignConstraints =
|
||||
[
|
||||
new(0x00000C00, 0x00000C00),
|
||||
new(0x00000030, 0x00000030),
|
||||
};
|
||||
new(0x00000030, 0x00000030)
|
||||
];
|
||||
|
||||
InstEncoding[] sizeaConstraints = new InstEncoding[]
|
||||
{
|
||||
new(0x000000C0, 0x000000D0),
|
||||
};
|
||||
InstEncoding[] sizeaConstraints =
|
||||
[
|
||||
new(0x000000C0, 0x000000D0)
|
||||
];
|
||||
|
||||
InstEncoding[] sizeSizeVdConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] sizeSizeVdConstraints =
|
||||
[
|
||||
new(0x00300000, 0x00300000),
|
||||
new(0x00000000, 0x00300000),
|
||||
new(0x00001000, 0x00001000),
|
||||
};
|
||||
new(0x00001000, 0x00001000)
|
||||
];
|
||||
|
||||
InstEncoding[] sizeQvdQvnConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] sizeQvdQvnConstraints =
|
||||
[
|
||||
new(0x00300000, 0x00300000),
|
||||
new(0x10001000, 0x10001000),
|
||||
new(0x10010000, 0x10010000),
|
||||
};
|
||||
new(0x10010000, 0x10010000)
|
||||
];
|
||||
|
||||
InstEncoding[] imm3hImm3hImm3hImm3hImm3hVdConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] imm3hImm3hImm3hImm3hImm3hVdConstraints =
|
||||
[
|
||||
new(0x00000000, 0x00380000),
|
||||
new(0x00180000, 0x00380000),
|
||||
new(0x00280000, 0x00380000),
|
||||
new(0x00300000, 0x00380000),
|
||||
new(0x00380000, 0x00380000),
|
||||
new(0x00001000, 0x00001000),
|
||||
};
|
||||
new(0x00001000, 0x00001000)
|
||||
];
|
||||
|
||||
InstEncoding[] sizeVmConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] sizeVmConstraints =
|
||||
[
|
||||
new(0x000C0000, 0x000C0000),
|
||||
new(0x00000001, 0x00000001),
|
||||
};
|
||||
new(0x00000001, 0x00000001)
|
||||
];
|
||||
|
||||
InstEncoding[] opc1opc2Constraints = new InstEncoding[]
|
||||
{
|
||||
new(0x00000040, 0x00400060),
|
||||
};
|
||||
InstEncoding[] opc1opc2Constraints =
|
||||
[
|
||||
new(0x00000040, 0x00400060)
|
||||
];
|
||||
|
||||
InstEncoding[] uopc1opc2Uopc1opc2Constraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] uopc1opc2Uopc1opc2Constraints =
|
||||
[
|
||||
new(0x00800000, 0x00C00060),
|
||||
new(0x00000040, 0x00400060),
|
||||
};
|
||||
new(0x00000040, 0x00400060)
|
||||
];
|
||||
|
||||
InstEncoding[] sizeOpuOpsizeVdConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] sizeOpuOpsizeVdConstraints =
|
||||
[
|
||||
new(0x00300000, 0x00300000),
|
||||
new(0x10000200, 0x10000200),
|
||||
new(0x00100200, 0x00300200),
|
||||
new(0x00001000, 0x00001000),
|
||||
};
|
||||
new(0x00001000, 0x00001000)
|
||||
];
|
||||
|
||||
InstEncoding[] sizeOpsizeOpsizeQvdQvnQvmConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] sizeOpsizeOpsizeQvdQvnQvmConstraints =
|
||||
[
|
||||
new(0x00300000, 0x00300000),
|
||||
new(0x10100000, 0x10300000),
|
||||
new(0x10200000, 0x10300000),
|
||||
new(0x00001040, 0x00001040),
|
||||
new(0x00010040, 0x00010040),
|
||||
new(0x00000041, 0x00000041),
|
||||
};
|
||||
new(0x00000041, 0x00000041)
|
||||
];
|
||||
|
||||
InstEncoding[] cmodeQvdConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] cmodeQvdConstraints =
|
||||
[
|
||||
new(0x00000E00, 0x00000E00),
|
||||
new(0x00001040, 0x00001040),
|
||||
};
|
||||
new(0x00001040, 0x00001040)
|
||||
];
|
||||
|
||||
InstEncoding[] qConstraints = new InstEncoding[]
|
||||
{
|
||||
new(0x00000040, 0x00000040),
|
||||
};
|
||||
InstEncoding[] qConstraints =
|
||||
[
|
||||
new(0x00000040, 0x00000040)
|
||||
];
|
||||
|
||||
InstEncoding[] sizeQConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] sizeQConstraints =
|
||||
[
|
||||
new(0x00300000, 0x00300000),
|
||||
new(0x00000040, 0x00000040),
|
||||
};
|
||||
new(0x00000040, 0x00000040)
|
||||
];
|
||||
|
||||
InstEncoding[] sizeConstraints4 = new InstEncoding[]
|
||||
{
|
||||
new(0x00300000, 0x00300000),
|
||||
};
|
||||
InstEncoding[] sizeConstraints4 =
|
||||
[
|
||||
new(0x00300000, 0x00300000)
|
||||
];
|
||||
|
||||
InstEncoding[] qvdQvnQvmSizeSizeConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] qvdQvnQvmSizeSizeConstraints =
|
||||
[
|
||||
new(0x00001040, 0x00001040),
|
||||
new(0x00010040, 0x00010040),
|
||||
new(0x00000041, 0x00000041),
|
||||
new(0x00000000, 0x00300000),
|
||||
new(0x00300000, 0x00300000),
|
||||
};
|
||||
new(0x00300000, 0x00300000)
|
||||
];
|
||||
|
||||
InstEncoding[] sizeSizeQvdQvnConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] sizeSizeQvdQvnConstraints =
|
||||
[
|
||||
new(0x00300000, 0x00300000),
|
||||
new(0x00000000, 0x00300000),
|
||||
new(0x10001000, 0x10001000),
|
||||
new(0x10010000, 0x10010000),
|
||||
};
|
||||
new(0x10010000, 0x10010000)
|
||||
];
|
||||
|
||||
InstEncoding[] opSizeVmConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] opSizeVmConstraints =
|
||||
[
|
||||
new(0x00000000, 0x000000C0),
|
||||
new(0x000C0000, 0x000C0000),
|
||||
new(0x00000001, 0x00000001),
|
||||
};
|
||||
new(0x00000001, 0x00000001)
|
||||
];
|
||||
|
||||
InstEncoding[] qvdQvmQvnConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] qvdQvmQvnConstraints =
|
||||
[
|
||||
new(0x00001040, 0x00001040),
|
||||
new(0x00000041, 0x00000041),
|
||||
new(0x00010040, 0x00010040),
|
||||
};
|
||||
new(0x00010040, 0x00010040)
|
||||
];
|
||||
|
||||
InstEncoding[] imm6UopVmConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] imm6UopVmConstraints =
|
||||
[
|
||||
new(0x00000000, 0x00380000),
|
||||
new(0x00000000, 0x10000100),
|
||||
new(0x00000001, 0x00000001),
|
||||
};
|
||||
new(0x00000001, 0x00000001)
|
||||
];
|
||||
|
||||
InstEncoding[] imm6lUopQvdQvmConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] imm6lUopQvdQvmConstraints =
|
||||
[
|
||||
new(0x00000000, 0x00380080),
|
||||
new(0x00000000, 0x10000100),
|
||||
new(0x00001040, 0x00001040),
|
||||
new(0x00000041, 0x00000041),
|
||||
};
|
||||
new(0x00000041, 0x00000041)
|
||||
];
|
||||
|
||||
InstEncoding[] qvdQvmSizeSizeConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] qvdQvmSizeSizeConstraints =
|
||||
[
|
||||
new(0x00001040, 0x00001040),
|
||||
new(0x00000041, 0x00000041),
|
||||
new(0x00000000, 0x000C0000),
|
||||
new(0x000C0000, 0x000C0000),
|
||||
};
|
||||
new(0x000C0000, 0x000C0000)
|
||||
];
|
||||
|
||||
InstEncoding[] sizeSizeSizeQvdQvmConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] sizeSizeSizeQvdQvmConstraints =
|
||||
[
|
||||
new(0x00040000, 0x000C0000),
|
||||
new(0x00080000, 0x000C0000),
|
||||
new(0x000C0000, 0x000C0000),
|
||||
new(0x00001040, 0x00001040),
|
||||
new(0x00000041, 0x00000041),
|
||||
};
|
||||
new(0x00000041, 0x00000041)
|
||||
];
|
||||
|
||||
InstEncoding[] sizeSizeQvdQvmConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] sizeSizeQvdQvmConstraints =
|
||||
[
|
||||
new(0x00080000, 0x000C0000),
|
||||
new(0x000C0000, 0x000C0000),
|
||||
new(0x00001040, 0x00001040),
|
||||
new(0x00000041, 0x00000041),
|
||||
};
|
||||
new(0x00000041, 0x00000041)
|
||||
];
|
||||
|
||||
InstEncoding[] imm6lQvdQvmConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] imm6lQvdQvmConstraints =
|
||||
[
|
||||
new(0x00000000, 0x00380080),
|
||||
new(0x00001040, 0x00001040),
|
||||
new(0x00000041, 0x00000041),
|
||||
};
|
||||
new(0x00000041, 0x00000041)
|
||||
];
|
||||
|
||||
InstEncoding[] imm6VmConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] imm6VmConstraints =
|
||||
[
|
||||
new(0x00000000, 0x00380000),
|
||||
new(0x00000001, 0x00000001),
|
||||
};
|
||||
new(0x00000001, 0x00000001)
|
||||
];
|
||||
|
||||
InstEncoding[] imm6VdImm6Imm6Imm6Constraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] imm6VdImm6Imm6Imm6Constraints =
|
||||
[
|
||||
new(0x00000000, 0x00380000),
|
||||
new(0x00001000, 0x00001000),
|
||||
new(0x00080000, 0x003F0000),
|
||||
new(0x00100000, 0x003F0000),
|
||||
new(0x00200000, 0x003F0000),
|
||||
};
|
||||
new(0x00200000, 0x003F0000)
|
||||
];
|
||||
|
||||
InstEncoding[] sizeVdConstraints2 = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] sizeVdConstraints2 =
|
||||
[
|
||||
new(0x000C0000, 0x000C0000),
|
||||
new(0x00001000, 0x00001000),
|
||||
};
|
||||
new(0x00001000, 0x00001000)
|
||||
];
|
||||
|
||||
InstEncoding[] sizeQsizeQvdQvmConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] sizeQsizeQvdQvmConstraints =
|
||||
[
|
||||
new(0x000C0000, 0x000C0000),
|
||||
new(0x00080000, 0x000C0040),
|
||||
new(0x00001040, 0x00001040),
|
||||
new(0x00000041, 0x00000041),
|
||||
};
|
||||
new(0x00000041, 0x00000041)
|
||||
];
|
||||
|
||||
List<InstInfoForTable> insts = new()
|
||||
{
|
||||
List<InstInfoForTable> insts =
|
||||
[
|
||||
new(0xF1400000, 0xFBE08000, InstName.AdcI, T.AdcIT1, IsaVersion.v80, InstFlags.Rd),
|
||||
new(0xEB400000, 0xFFE08000, InstName.AdcR, T.AdcRT2, IsaVersion.v80, InstFlags.Rd),
|
||||
new(0xF1000000, 0xFBE08000, rnRdsConstraints, InstName.AddI, T.AddIT3, IsaVersion.v80, InstFlags.Rd),
|
||||
@@ -1190,7 +1190,7 @@ namespace Ryujinx.Cpu.LightningJit.Arm32
|
||||
new(0xF3AF8002, 0xFFFFFFFF, InstName.Wfe, T.WfeT2, IsaVersion.v80, InstFlags.None),
|
||||
new(0xF3AF8003, 0xFFFFFFFF, InstName.Wfi, T.WfiT2, IsaVersion.v80, InstFlags.None),
|
||||
new(0xF3AF8001, 0xFFFFFFFF, InstName.Yield, T.YieldT2, IsaVersion.v80, InstFlags.None),
|
||||
};
|
||||
];
|
||||
|
||||
_table = new(insts);
|
||||
}
|
||||
|
||||
@@ -25,8 +25,8 @@ namespace Ryujinx.Cpu.LightningJit.Arm64
|
||||
{
|
||||
Debug.Assert((int)((endAddress - address) / 4) == instructions.Count);
|
||||
|
||||
_predecessors = new();
|
||||
_successors = new();
|
||||
_predecessors = [];
|
||||
_successors = [];
|
||||
Address = address;
|
||||
EndAddress = endAddress;
|
||||
Instructions = instructions;
|
||||
|
||||
@@ -36,8 +36,8 @@ namespace Ryujinx.Cpu.LightningJit.Arm64
|
||||
{
|
||||
Console.WriteLine($"bb {block.Index}");
|
||||
|
||||
List<int> predList = new();
|
||||
List<int> succList = new();
|
||||
List<int> predList = [];
|
||||
List<int> succList = [];
|
||||
|
||||
for (int index = 0; index < block.PredecessorsCount; index++)
|
||||
{
|
||||
|
||||
@@ -309,7 +309,7 @@ namespace Ryujinx.Cpu.LightningJit.Arm64.Target.Arm64
|
||||
MultiBlock multiBlock = Decoder.DecodeMulti(cpuPreset, memoryManager, address);
|
||||
|
||||
Dictionary<ulong, int> targets = new();
|
||||
List<PendingBranch> pendingBranches = new();
|
||||
List<PendingBranch> pendingBranches = [];
|
||||
|
||||
uint gprUseMask = multiBlock.GlobalUseMask.GprMask;
|
||||
uint fpSimdUseMask = multiBlock.GlobalUseMask.FpSimdMask;
|
||||
|
||||
@@ -15,8 +15,8 @@ namespace Ryujinx.Cpu.LightningJit.Arm64.Target.Arm64
|
||||
|
||||
public static MultiBlock DecodeMulti(CpuPreset cpuPreset, IMemoryManager memoryManager, ulong address)
|
||||
{
|
||||
List<Block> blocks = new();
|
||||
List<ulong> branchTargets = new();
|
||||
List<Block> blocks = [];
|
||||
List<ulong> branchTargets = [];
|
||||
|
||||
RegisterMask useMask = RegisterMask.Zero;
|
||||
|
||||
@@ -238,7 +238,7 @@ namespace Ryujinx.Cpu.LightningJit.Arm64.Target.Arm64
|
||||
{
|
||||
ulong startAddress = address;
|
||||
|
||||
List<InstInfo> insts = new();
|
||||
List<InstInfo> insts = [];
|
||||
|
||||
uint gprUseMask = useMask.GprMask;
|
||||
uint fpSimdUseMask = useMask.FpSimdMask;
|
||||
|
||||
@@ -94,37 +94,37 @@ namespace Ryujinx.Cpu.LightningJit.Arm64.Target.Arm64
|
||||
|
||||
static InstTable()
|
||||
{
|
||||
InstEncoding[] qsizeConstraints = new InstEncoding[]
|
||||
{
|
||||
new(0x00C00000, 0x40C00000),
|
||||
};
|
||||
InstEncoding[] qsizeConstraints =
|
||||
[
|
||||
new(0x00C00000, 0x40C00000)
|
||||
];
|
||||
|
||||
InstEncoding[] sizeConstraints = new InstEncoding[]
|
||||
{
|
||||
new(0x00C00000, 0x00C00000),
|
||||
};
|
||||
InstEncoding[] sizeConstraints =
|
||||
[
|
||||
new(0x00C00000, 0x00C00000)
|
||||
];
|
||||
|
||||
InstEncoding[] opuOpuOpuConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] opuOpuOpuConstraints =
|
||||
[
|
||||
new(0x00001400, 0x00001C00),
|
||||
new(0x00001800, 0x00001C00),
|
||||
new(0x00001C00, 0x00001C00),
|
||||
};
|
||||
new(0x00001C00, 0x00001C00)
|
||||
];
|
||||
|
||||
InstEncoding[] shiftSfimm6Constraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] shiftSfimm6Constraints =
|
||||
[
|
||||
new(0x00C00000, 0x00C00000),
|
||||
new(0x00008000, 0x80008000),
|
||||
};
|
||||
new(0x00008000, 0x80008000)
|
||||
];
|
||||
|
||||
InstEncoding[] qsizeSizeConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] qsizeSizeConstraints =
|
||||
[
|
||||
new(0x00800000, 0x40C00000),
|
||||
new(0x00C00000, 0x00C00000),
|
||||
};
|
||||
new(0x00C00000, 0x00C00000)
|
||||
];
|
||||
|
||||
InstEncoding[] nimmsNimmsNimmsNimmsNimmsNimmsNimmsNimmsSfnConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] nimmsNimmsNimmsNimmsNimmsNimmsNimmsNimmsSfnConstraints =
|
||||
[
|
||||
new(0x0040FC00, 0x0040FC00),
|
||||
new(0x00007C00, 0x0040FC00),
|
||||
new(0x0000BC00, 0x0040FC00),
|
||||
@@ -133,326 +133,326 @@ namespace Ryujinx.Cpu.LightningJit.Arm64.Target.Arm64
|
||||
new(0x0000F400, 0x0040FC00),
|
||||
new(0x0000F800, 0x0040FC00),
|
||||
new(0x0000FC00, 0x0040FC00),
|
||||
new(0x00400000, 0x80400000),
|
||||
};
|
||||
new(0x00400000, 0x80400000)
|
||||
];
|
||||
|
||||
InstEncoding[] sfimm6Constraints = new InstEncoding[]
|
||||
{
|
||||
new(0x00008000, 0x80008000),
|
||||
};
|
||||
InstEncoding[] sfimm6Constraints =
|
||||
[
|
||||
new(0x00008000, 0x80008000)
|
||||
];
|
||||
|
||||
InstEncoding[] sfnSfnSfimmr5Sfimms5Constraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] sfnSfnSfimmr5Sfimms5Constraints =
|
||||
[
|
||||
new(0x80000000, 0x80400000),
|
||||
new(0x00400000, 0x80400000),
|
||||
new(0x00200000, 0x80200000),
|
||||
new(0x00008000, 0x80008000),
|
||||
};
|
||||
new(0x00008000, 0x80008000)
|
||||
];
|
||||
|
||||
InstEncoding[] cmodeopqConstraints = new InstEncoding[]
|
||||
{
|
||||
new(0x2000F000, 0x6000F000),
|
||||
};
|
||||
InstEncoding[] cmodeopqConstraints =
|
||||
[
|
||||
new(0x2000F000, 0x6000F000)
|
||||
];
|
||||
|
||||
InstEncoding[] rsRtConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] rsRtConstraints =
|
||||
[
|
||||
new(0x00010000, 0x00010000),
|
||||
new(0x00000001, 0x00000001),
|
||||
};
|
||||
new(0x00000001, 0x00000001)
|
||||
];
|
||||
|
||||
InstEncoding[] sfszSfszSfszSfszConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] sfszSfszSfszSfszConstraints =
|
||||
[
|
||||
new(0x80000000, 0x80000C00),
|
||||
new(0x80000400, 0x80000C00),
|
||||
new(0x80000800, 0x80000C00),
|
||||
new(0x00000C00, 0x80000C00),
|
||||
};
|
||||
new(0x00000C00, 0x80000C00)
|
||||
];
|
||||
|
||||
InstEncoding[] imm5Constraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] imm5Constraints =
|
||||
[
|
||||
new(0x00000000, 0x000F0000)
|
||||
];
|
||||
|
||||
InstEncoding[] imm5Imm5qConstraints =
|
||||
[
|
||||
new(0x00000000, 0x000F0000),
|
||||
};
|
||||
new(0x00080000, 0x400F0000)
|
||||
];
|
||||
|
||||
InstEncoding[] imm5Imm5qConstraints = new InstEncoding[]
|
||||
{
|
||||
new(0x00000000, 0x000F0000),
|
||||
new(0x00080000, 0x400F0000),
|
||||
};
|
||||
|
||||
InstEncoding[] nsfNsfSfimmsConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] nsfNsfSfimmsConstraints =
|
||||
[
|
||||
new(0x00400000, 0x80400000),
|
||||
new(0x80000000, 0x80400000),
|
||||
new(0x00008000, 0x80008000),
|
||||
};
|
||||
new(0x00008000, 0x80008000)
|
||||
];
|
||||
|
||||
InstEncoding[] qimm4Constraints = new InstEncoding[]
|
||||
{
|
||||
new(0x00004000, 0x40004000),
|
||||
};
|
||||
InstEncoding[] qimm4Constraints =
|
||||
[
|
||||
new(0x00004000, 0x40004000)
|
||||
];
|
||||
|
||||
InstEncoding[] qszConstraints = new InstEncoding[]
|
||||
{
|
||||
new(0x00400000, 0x40400000),
|
||||
};
|
||||
InstEncoding[] qszConstraints =
|
||||
[
|
||||
new(0x00400000, 0x40400000)
|
||||
];
|
||||
|
||||
InstEncoding[] euacEuacEuacConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] euacEuacEuacConstraints =
|
||||
[
|
||||
new(0x00000800, 0x20800800),
|
||||
new(0x00800000, 0x20800800),
|
||||
new(0x00800800, 0x20800800),
|
||||
};
|
||||
new(0x00800800, 0x20800800)
|
||||
];
|
||||
|
||||
InstEncoding[] qszEuacEuacEuacConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] qszEuacEuacEuacConstraints =
|
||||
[
|
||||
new(0x00400000, 0x40400000),
|
||||
new(0x00000800, 0x20800800),
|
||||
new(0x00800000, 0x20800800),
|
||||
new(0x00800800, 0x20800800),
|
||||
};
|
||||
new(0x00800800, 0x20800800)
|
||||
];
|
||||
|
||||
InstEncoding[] szConstraints = new InstEncoding[]
|
||||
{
|
||||
new(0x00400000, 0x00400000),
|
||||
};
|
||||
InstEncoding[] szConstraints =
|
||||
[
|
||||
new(0x00400000, 0x00400000)
|
||||
];
|
||||
|
||||
InstEncoding[] sizeQsizeConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] sizeQsizeConstraints =
|
||||
[
|
||||
new(0x00000000, 0x00C00000),
|
||||
new(0x00C00000, 0x40C00000),
|
||||
};
|
||||
new(0x00C00000, 0x40C00000)
|
||||
];
|
||||
|
||||
InstEncoding[] sizeSizeSizelSizeqSizehqConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] sizeSizeSizelSizeqSizehqConstraints =
|
||||
[
|
||||
new(0x00000000, 0x00C00000),
|
||||
new(0x00C00000, 0x00C00000),
|
||||
new(0x00A00000, 0x00E00000),
|
||||
new(0x00800000, 0x40C00000),
|
||||
new(0x00400800, 0x40C00800),
|
||||
};
|
||||
new(0x00400800, 0x40C00800)
|
||||
];
|
||||
|
||||
InstEncoding[] szConstraints2 = new InstEncoding[]
|
||||
{
|
||||
new(0x00000000, 0x00400000),
|
||||
};
|
||||
InstEncoding[] szConstraints2 =
|
||||
[
|
||||
new(0x00000000, 0x00400000)
|
||||
];
|
||||
|
||||
InstEncoding[] immhConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] immhConstraints =
|
||||
[
|
||||
new(0x00000000, 0x00780000)
|
||||
];
|
||||
|
||||
InstEncoding[] immhQimmhConstraints =
|
||||
[
|
||||
new(0x00000000, 0x00780000),
|
||||
};
|
||||
new(0x00400000, 0x40400000)
|
||||
];
|
||||
|
||||
InstEncoding[] immhQimmhConstraints = new InstEncoding[]
|
||||
{
|
||||
new(0x00000000, 0x00780000),
|
||||
new(0x00400000, 0x40400000),
|
||||
};
|
||||
InstEncoding[] sfscaleConstraints =
|
||||
[
|
||||
new(0x00000000, 0x80008000)
|
||||
];
|
||||
|
||||
InstEncoding[] sfscaleConstraints = new InstEncoding[]
|
||||
{
|
||||
new(0x00000000, 0x80008000),
|
||||
};
|
||||
|
||||
InstEncoding[] ftypeopcFtypeopcFtypeopcFtypeopcFtypeOpcConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] ftypeopcFtypeopcFtypeopcFtypeopcFtypeOpcConstraints =
|
||||
[
|
||||
new(0x00000000, 0x00C18000),
|
||||
new(0x00408000, 0x00C18000),
|
||||
new(0x00810000, 0x00C18000),
|
||||
new(0x00C18000, 0x00C18000),
|
||||
new(0x00800000, 0x00C00000),
|
||||
new(0x00010000, 0x00018000),
|
||||
};
|
||||
new(0x00010000, 0x00018000)
|
||||
];
|
||||
|
||||
InstEncoding[] szlConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] szlConstraints =
|
||||
[
|
||||
new(0x00600000, 0x00600000)
|
||||
];
|
||||
|
||||
InstEncoding[] szlQszConstraints =
|
||||
[
|
||||
new(0x00600000, 0x00600000),
|
||||
};
|
||||
new(0x00400000, 0x40400000)
|
||||
];
|
||||
|
||||
InstEncoding[] szlQszConstraints = new InstEncoding[]
|
||||
{
|
||||
new(0x00600000, 0x00600000),
|
||||
new(0x00400000, 0x40400000),
|
||||
};
|
||||
InstEncoding[] qConstraints =
|
||||
[
|
||||
new(0x00000000, 0x40000000)
|
||||
];
|
||||
|
||||
InstEncoding[] qConstraints = new InstEncoding[]
|
||||
{
|
||||
new(0x00000000, 0x40000000),
|
||||
};
|
||||
|
||||
InstEncoding[] sfftypermodeSfftypermodeConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] sfftypermodeSfftypermodeConstraints =
|
||||
[
|
||||
new(0x00400000, 0x80C80000),
|
||||
new(0x80000000, 0x80C80000),
|
||||
};
|
||||
new(0x80000000, 0x80C80000)
|
||||
];
|
||||
|
||||
InstEncoding[] uo1o2Constraints = new InstEncoding[]
|
||||
{
|
||||
new(0x20800000, 0x20801000),
|
||||
};
|
||||
InstEncoding[] uo1o2Constraints =
|
||||
[
|
||||
new(0x20800000, 0x20801000)
|
||||
];
|
||||
|
||||
InstEncoding[] qszUo1o2Constraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] qszUo1o2Constraints =
|
||||
[
|
||||
new(0x00400000, 0x40400000),
|
||||
new(0x20800000, 0x20801000),
|
||||
};
|
||||
new(0x20800000, 0x20801000)
|
||||
];
|
||||
|
||||
InstEncoding[] sConstraints = new InstEncoding[]
|
||||
{
|
||||
new(0x00001000, 0x00001000),
|
||||
};
|
||||
InstEncoding[] sConstraints =
|
||||
[
|
||||
new(0x00001000, 0x00001000)
|
||||
];
|
||||
|
||||
InstEncoding[] opcodesizeOpcodesizeOpcodesizesOpcodesizeConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] opcodesizeOpcodesizeOpcodesizesOpcodesizeConstraints =
|
||||
[
|
||||
new(0x00004400, 0x0000C400),
|
||||
new(0x00008800, 0x0000C800),
|
||||
new(0x00009400, 0x0000D400),
|
||||
new(0x0000C000, 0x0000C000),
|
||||
};
|
||||
new(0x0000C000, 0x0000C000)
|
||||
];
|
||||
|
||||
InstEncoding[] qsizeConstraints2 = new InstEncoding[]
|
||||
{
|
||||
new(0x00000C00, 0x40000C00),
|
||||
};
|
||||
InstEncoding[] qsizeConstraints2 =
|
||||
[
|
||||
new(0x00000C00, 0x40000C00)
|
||||
];
|
||||
|
||||
InstEncoding[] rtRtConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] rtRtConstraints =
|
||||
[
|
||||
new(0x00000018, 0x00000018),
|
||||
new(0x00000001, 0x00000001),
|
||||
};
|
||||
new(0x00000001, 0x00000001)
|
||||
];
|
||||
|
||||
InstEncoding[] opc1sizeOpc1sizeOpc1sizeConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] opc1sizeOpc1sizeOpc1sizeConstraints =
|
||||
[
|
||||
new(0x40800000, 0xC0800000),
|
||||
new(0x80800000, 0xC0800000),
|
||||
new(0xC0800000, 0xC0800000),
|
||||
};
|
||||
new(0xC0800000, 0xC0800000)
|
||||
];
|
||||
|
||||
InstEncoding[] rtRt2Constraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] rtRt2Constraints =
|
||||
[
|
||||
new(0x0000001F, 0x0000001F),
|
||||
new(0x001F0000, 0x001F0000),
|
||||
};
|
||||
new(0x001F0000, 0x001F0000)
|
||||
];
|
||||
|
||||
InstEncoding[] opcConstraints = new InstEncoding[]
|
||||
{
|
||||
new(0xC0000000, 0xC0000000),
|
||||
};
|
||||
InstEncoding[] opcConstraints =
|
||||
[
|
||||
new(0xC0000000, 0xC0000000)
|
||||
];
|
||||
|
||||
InstEncoding[] opcConstraints2 = new InstEncoding[]
|
||||
{
|
||||
new(0x40000000, 0x40000000),
|
||||
};
|
||||
InstEncoding[] opcConstraints2 =
|
||||
[
|
||||
new(0x40000000, 0x40000000)
|
||||
];
|
||||
|
||||
InstEncoding[] opclOpcConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] opclOpcConstraints =
|
||||
[
|
||||
new(0x40000000, 0x40400000),
|
||||
new(0xC0000000, 0xC0000000),
|
||||
};
|
||||
new(0xC0000000, 0xC0000000)
|
||||
];
|
||||
|
||||
InstEncoding[] optionConstraints = new InstEncoding[]
|
||||
{
|
||||
new(0x00000000, 0x00004000),
|
||||
};
|
||||
InstEncoding[] optionConstraints =
|
||||
[
|
||||
new(0x00000000, 0x00004000)
|
||||
];
|
||||
|
||||
InstEncoding[] opc1sizeOpc1sizeOpc1sizeOptionConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] opc1sizeOpc1sizeOpc1sizeOptionConstraints =
|
||||
[
|
||||
new(0x40800000, 0xC0800000),
|
||||
new(0x80800000, 0xC0800000),
|
||||
new(0xC0800000, 0xC0800000),
|
||||
new(0x00000000, 0x00004000),
|
||||
};
|
||||
new(0x00000000, 0x00004000)
|
||||
];
|
||||
|
||||
InstEncoding[] sizeSizeConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] sizeSizeConstraints =
|
||||
[
|
||||
new(0x00000000, 0x00C00000),
|
||||
new(0x00C00000, 0x00C00000),
|
||||
};
|
||||
new(0x00C00000, 0x00C00000)
|
||||
];
|
||||
|
||||
InstEncoding[] sfhwConstraints = new InstEncoding[]
|
||||
{
|
||||
new(0x00400000, 0x80400000),
|
||||
};
|
||||
InstEncoding[] sfhwConstraints =
|
||||
[
|
||||
new(0x00400000, 0x80400000)
|
||||
];
|
||||
|
||||
InstEncoding[] rtConstraints = new InstEncoding[]
|
||||
{
|
||||
new(0x00000001, 0x00000001),
|
||||
};
|
||||
InstEncoding[] rtConstraints =
|
||||
[
|
||||
new(0x00000001, 0x00000001)
|
||||
];
|
||||
|
||||
InstEncoding[] usizeUsizeUsizeSizeConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] usizeUsizeUsizeSizeConstraints =
|
||||
[
|
||||
new(0x20400000, 0x20C00000),
|
||||
new(0x20800000, 0x20C00000),
|
||||
new(0x20C00000, 0x20C00000),
|
||||
new(0x00C00000, 0x00C00000),
|
||||
};
|
||||
new(0x00C00000, 0x00C00000)
|
||||
];
|
||||
|
||||
InstEncoding[] sizeSizeConstraints2 = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] sizeSizeConstraints2 =
|
||||
[
|
||||
new(0x00400000, 0x00C00000),
|
||||
new(0x00800000, 0x00C00000)
|
||||
];
|
||||
|
||||
InstEncoding[] rtConstraints2 =
|
||||
[
|
||||
new(0x00000018, 0x00000018)
|
||||
];
|
||||
|
||||
InstEncoding[] sfopcConstraints =
|
||||
[
|
||||
new(0x00000400, 0x80000400)
|
||||
];
|
||||
|
||||
InstEncoding[] sizeSizeSizeConstraints =
|
||||
[
|
||||
new(0x00400000, 0x00C00000),
|
||||
new(0x00800000, 0x00C00000),
|
||||
};
|
||||
new(0x00C00000, 0x00C00000)
|
||||
];
|
||||
|
||||
InstEncoding[] rtConstraints2 = new InstEncoding[]
|
||||
{
|
||||
new(0x00000018, 0x00000018),
|
||||
};
|
||||
|
||||
InstEncoding[] sfopcConstraints = new InstEncoding[]
|
||||
{
|
||||
new(0x00000400, 0x80000400),
|
||||
};
|
||||
|
||||
InstEncoding[] sizeSizeSizeConstraints = new InstEncoding[]
|
||||
{
|
||||
new(0x00400000, 0x00C00000),
|
||||
InstEncoding[] sizeSizeConstraints3 =
|
||||
[
|
||||
new(0x00800000, 0x00C00000),
|
||||
new(0x00C00000, 0x00C00000),
|
||||
};
|
||||
new(0x00C00000, 0x00C00000)
|
||||
];
|
||||
|
||||
InstEncoding[] sizeSizeConstraints3 = new InstEncoding[]
|
||||
{
|
||||
new(0x00800000, 0x00C00000),
|
||||
new(0x00C00000, 0x00C00000),
|
||||
};
|
||||
InstEncoding[] sfConstraints =
|
||||
[
|
||||
new(0x00000000, 0x80000000)
|
||||
];
|
||||
|
||||
InstEncoding[] sfConstraints = new InstEncoding[]
|
||||
{
|
||||
new(0x00000000, 0x80000000),
|
||||
};
|
||||
|
||||
InstEncoding[] immhImmhConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] immhImmhConstraints =
|
||||
[
|
||||
new(0x00000000, 0x00780000),
|
||||
new(0x00400000, 0x00400000),
|
||||
};
|
||||
new(0x00400000, 0x00400000)
|
||||
];
|
||||
|
||||
InstEncoding[] sizeSizeConstraints4 = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] sizeSizeConstraints4 =
|
||||
[
|
||||
new(0x00C00000, 0x00C00000),
|
||||
new(0x00000000, 0x00C00000),
|
||||
};
|
||||
new(0x00000000, 0x00C00000)
|
||||
];
|
||||
|
||||
InstEncoding[] ssizeSsizeSsizeConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] ssizeSsizeSsizeConstraints =
|
||||
[
|
||||
new(0x00000000, 0x00C00800),
|
||||
new(0x00400000, 0x00C00800),
|
||||
new(0x00800000, 0x00C00800),
|
||||
};
|
||||
new(0x00800000, 0x00C00800)
|
||||
];
|
||||
|
||||
InstEncoding[] immhOpuConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] immhOpuConstraints =
|
||||
[
|
||||
new(0x00000000, 0x00780000),
|
||||
new(0x00000000, 0x20001000),
|
||||
};
|
||||
new(0x00000000, 0x20001000)
|
||||
];
|
||||
|
||||
InstEncoding[] immhQimmhOpuConstraints = new InstEncoding[]
|
||||
{
|
||||
InstEncoding[] immhQimmhOpuConstraints =
|
||||
[
|
||||
new(0x00000000, 0x00780000),
|
||||
new(0x00400000, 0x40400000),
|
||||
new(0x00000000, 0x20001000),
|
||||
};
|
||||
new(0x00000000, 0x20001000)
|
||||
];
|
||||
|
||||
List<InstInfo> insts = new()
|
||||
{
|
||||
List<InstInfo> insts =
|
||||
[
|
||||
new(0x5AC02000, 0x7FFFFC00, InstName.Abs, IsaVersion.v89, InstFlags.RdRn),
|
||||
new(0x5EE0B800, 0xFFFFFC00, InstName.AbsAdvsimdS, IsaVersion.v80, InstFlags.RdRnFpSimd),
|
||||
new(0x0E20B800, 0xBF3FFC00, qsizeConstraints, InstName.AbsAdvsimdV, IsaVersion.v80, InstFlags.RdRnFpSimd),
|
||||
@@ -1587,7 +1587,7 @@ namespace Ryujinx.Cpu.LightningJit.Arm64.Target.Arm64
|
||||
new(0xD503203F, 0xFFFFFFFF, InstName.Yield, IsaVersion.v80, InstFlags.None),
|
||||
new(0x0E003800, 0xBF20FC00, qsizeConstraints, InstName.Zip1Advsimd, IsaVersion.v80, InstFlags.RdRnRmFpSimd),
|
||||
new(0x0E007800, 0xBF20FC00, qsizeConstraints, InstName.Zip2Advsimd, IsaVersion.v80, InstFlags.RdRnRmFpSimd),
|
||||
};
|
||||
];
|
||||
|
||||
_table = new(insts);
|
||||
}
|
||||
|
||||
@@ -24,7 +24,7 @@ namespace Ryujinx.Cpu.LightningJit.Cache
|
||||
}
|
||||
}
|
||||
|
||||
private readonly List<MemoryBlock> _blocks = new();
|
||||
private readonly List<MemoryBlock> _blocks = [];
|
||||
|
||||
public CacheMemoryAllocator(int capacity)
|
||||
{
|
||||
|
||||
@@ -22,7 +22,7 @@ namespace Ryujinx.Cpu.LightningJit.Cache
|
||||
|
||||
private static CacheMemoryAllocator _cacheAllocator;
|
||||
|
||||
private static readonly List<CacheEntry> _cacheEntries = new();
|
||||
private static readonly List<CacheEntry> _cacheEntries = [];
|
||||
|
||||
private static readonly Lock _lock = new();
|
||||
private static bool _initialized;
|
||||
|
||||
@@ -6,8 +6,8 @@ namespace Ryujinx.Cpu.LightningJit.Cache
|
||||
{
|
||||
class JitCacheInvalidation
|
||||
{
|
||||
private static readonly int[] _invalidationCode = new int[]
|
||||
{
|
||||
private static readonly int[] _invalidationCode =
|
||||
[
|
||||
unchecked((int)0xd53b0022), // mrs x2, ctr_el0
|
||||
unchecked((int)0xd3504c44), // ubfx x4, x2, #16, #4
|
||||
unchecked((int)0x52800083), // mov w3, #0x4
|
||||
@@ -35,8 +35,8 @@ namespace Ryujinx.Cpu.LightningJit.Cache
|
||||
unchecked((int)0x54ffffa8), // b.hi 54 <ic_clear_loop>
|
||||
unchecked((int)0xd5033b9f), // dsb ish
|
||||
unchecked((int)0xd5033fdf), // isb
|
||||
unchecked((int)0xd65f03c0), // ret
|
||||
};
|
||||
unchecked((int)0xd65f03c0) // ret
|
||||
];
|
||||
|
||||
private delegate void InvalidateCache(ulong start, ulong end);
|
||||
|
||||
|
||||
@@ -231,7 +231,7 @@ namespace Ryujinx.Cpu.LightningJit.Cache
|
||||
_sharedCache.Pointer,
|
||||
SharedCacheSize);
|
||||
|
||||
List<(ulong, ThreadLocalCacheEntry)> toDelete = new();
|
||||
List<(ulong, ThreadLocalCacheEntry)> toDelete = [];
|
||||
|
||||
foreach ((ulong address, ThreadLocalCacheEntry entry) in _threadLocalCache)
|
||||
{
|
||||
|
||||
@@ -35,8 +35,8 @@ namespace Ryujinx.Cpu.LightningJit.Cache
|
||||
{
|
||||
_alignedRangeAction = alignedRangeAction;
|
||||
_alignedFunctionAction = alignedFunctionAction;
|
||||
_pendingFunctions = new();
|
||||
_ranges = new();
|
||||
_pendingFunctions = [];
|
||||
_ranges = [];
|
||||
}
|
||||
|
||||
public bool Has(ulong address)
|
||||
|
||||
@@ -26,7 +26,7 @@ namespace Ryujinx.Cpu.LightningJit.CodeGen.Arm64
|
||||
public Assembler(CodeWriter writer)
|
||||
{
|
||||
_code = writer.GetList();
|
||||
_labels = new List<LabelState>();
|
||||
_labels = [];
|
||||
}
|
||||
|
||||
public readonly Operand CreateLabel()
|
||||
@@ -342,7 +342,7 @@ namespace Ryujinx.Cpu.LightningJit.CodeGen.Arm64
|
||||
|
||||
public readonly void Cset(Operand rd, ArmCondition condition)
|
||||
{
|
||||
Operand zr = new Operand(ZrRegister, RegisterType.Integer, rd.Type);
|
||||
Operand zr = new(ZrRegister, RegisterType.Integer, rd.Type);
|
||||
Csinc(rd, zr, zr, (ArmCondition)((int)condition ^ 1));
|
||||
}
|
||||
|
||||
@@ -857,7 +857,7 @@ namespace Ryujinx.Cpu.LightningJit.CodeGen.Arm64
|
||||
|
||||
public readonly void PrfmI(Operand rn, int imm, uint type, uint target, uint policy)
|
||||
{
|
||||
Operand rt = new Operand((int)EncodeTypeTargetPolicy(type, target, policy), RegisterType.Integer, OperandType.I32);
|
||||
Operand rt = new((int)EncodeTypeTargetPolicy(type, target, policy), RegisterType.Integer, OperandType.I32);
|
||||
WriteInstruction(0xf9800000u | (EncodeUImm12(imm, 3) << 10), rt, rn);
|
||||
}
|
||||
|
||||
@@ -868,7 +868,7 @@ namespace Ryujinx.Cpu.LightningJit.CodeGen.Arm64
|
||||
|
||||
public readonly void Prfum(Operand rn, int imm, uint type, uint target, uint policy)
|
||||
{
|
||||
Operand rt = new Operand((int)EncodeTypeTargetPolicy(type, target, policy), RegisterType.Integer, OperandType.I32);
|
||||
Operand rt = new((int)EncodeTypeTargetPolicy(type, target, policy), RegisterType.Integer, OperandType.I32);
|
||||
WriteInstruction(0xf8800000u | (EncodeSImm9(imm) << 12), rt, rn);
|
||||
}
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ namespace Ryujinx.Cpu.LightningJit.CodeGen.Arm64
|
||||
|
||||
public TailMerger()
|
||||
{
|
||||
_branchPointers = new();
|
||||
_branchPointers = [];
|
||||
}
|
||||
|
||||
public void AddConditionalReturn(CodeWriter writer, in Assembler asm, ArmCondition returnCondition)
|
||||
|
||||
@@ -12,7 +12,7 @@ namespace Ryujinx.Cpu.LightningJit
|
||||
|
||||
public CodeWriter()
|
||||
{
|
||||
_instructions = new();
|
||||
_instructions = [];
|
||||
}
|
||||
|
||||
public void WriteInstruction(uint instruction)
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user