misc: chore: Use collection expressions in Cpu

This commit is contained in:
Evan Husted
2025-01-26 15:41:05 -06:00
parent ed2590a8ac
commit 3e12865f51
26 changed files with 934 additions and 931 deletions
@@ -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;
+297 -297
View File
@@ -9,494 +9,494 @@ namespace Ryujinx.Cpu.LightningJit.Arm32
static InstTableA32()
{
InstEncoding[] condConstraints = new InstEncoding[]
{
new(0xF0000000, 0xF0000000),
};
InstEncoding[] condConstraints =
[
new(0xF0000000, 0xF0000000)
];
InstEncoding[] condRnsRnConstraints = new InstEncoding[]
{
InstEncoding[] condRnsRnConstraints =
[
new(0xF0000000, 0xF0000000),
new(0x000F0000, 0x001F0000),
new(0x000D0000, 0x000F0000),
};
new(0x000D0000, 0x000F0000)
];
InstEncoding[] condRnConstraints = new InstEncoding[]
{
InstEncoding[] condRnConstraints =
[
new(0xF0000000, 0xF0000000),
new(0x000D0000, 0x000F0000),
};
new(0x000D0000, 0x000F0000)
];
InstEncoding[] vdVmConstraints = new InstEncoding[]
{
InstEncoding[] vdVmConstraints =
[
new(0x00001000, 0x00001000),
new(0x00000001, 0x00000001),
};
new(0x00000001, 0x00000001)
];
InstEncoding[] condRnConstraints2 = new InstEncoding[]
{
InstEncoding[] condRnConstraints2 =
[
new(0xF0000000, 0xF0000000),
new(0x0000000F, 0x0000000F),
};
new(0x0000000F, 0x0000000F)
];
InstEncoding[] optionConstraints = new InstEncoding[]
{
new(0x00000000, 0x0000000F),
};
InstEncoding[] optionConstraints =
[
new(0x00000000, 0x0000000F)
];
InstEncoding[] condPuwPwPuwPuwConstraints = new InstEncoding[]
{
InstEncoding[] condPuwPwPuwPuwConstraints =
[
new(0xF0000000, 0xF0000000),
new(0x00000000, 0x01A00000),
new(0x01000000, 0x01200000),
new(0x00200000, 0x01A00000),
new(0x01A00000, 0x01A00000),
};
new(0x01A00000, 0x01A00000)
];
InstEncoding[] condRnPuwConstraints = new InstEncoding[]
{
InstEncoding[] condRnPuwConstraints =
[
new(0xF0000000, 0xF0000000),
new(0x000F0000, 0x000F0000),
new(0x00000000, 0x01A00000),
};
new(0x00000000, 0x01A00000)
];
InstEncoding[] condPuwConstraints = new InstEncoding[]
{
InstEncoding[] condPuwConstraints =
[
new(0xF0000000, 0xF0000000),
new(0x00000000, 0x01A00000),
};
new(0x00000000, 0x01A00000)
];
InstEncoding[] condRnPwConstraints = new InstEncoding[]
{
InstEncoding[] condRnPwConstraints =
[
new(0xF0000000, 0xF0000000),
new(0x000F0000, 0x000F0000),
new(0x00200000, 0x01200000),
};
new(0x00200000, 0x01200000)
];
InstEncoding[] condPwConstraints = new InstEncoding[]
{
InstEncoding[] condPwConstraints =
[
new(0xF0000000, 0xF0000000),
new(0x00200000, 0x01200000),
};
new(0x00200000, 0x01200000)
];
InstEncoding[] condRnConstraints3 = new InstEncoding[]
{
InstEncoding[] condRnConstraints3 =
[
new(0xF0000000, 0xF0000000),
new(0x000F0000, 0x000F0000),
};
new(0x000F0000, 0x000F0000)
];
InstEncoding[] condMaskrConstraints = new InstEncoding[]
{
InstEncoding[] condMaskrConstraints =
[
new(0xF0000000, 0xF0000000),
new(0x00000000, 0x004F0000),
};
new(0x00000000, 0x004F0000)
];
InstEncoding[] rnConstraints = new InstEncoding[]
{
new(0x000F0000, 0x000F0000),
};
InstEncoding[] rnConstraints =
[
new(0x000F0000, 0x000F0000)
];
InstEncoding[] vdVnVmConstraints = new InstEncoding[]
{
InstEncoding[] vdVnVmConstraints =
[
new(0x00001000, 0x00001000),
new(0x00010000, 0x00010000),
new(0x00000001, 0x00000001),
};
new(0x00000001, 0x00000001)
];
InstEncoding[] condRaConstraints = new InstEncoding[]
{
InstEncoding[] condRaConstraints =
[
new(0xF0000000, 0xF0000000),
new(0x0000F000, 0x0000F000),
};
new(0x0000F000, 0x0000F000)
];
InstEncoding[] sizeQvdQvnQvmConstraints = new InstEncoding[]
{
InstEncoding[] sizeQvdQvnQvmConstraints =
[
new(0x00300000, 0x00300000),
new(0x00001040, 0x00001040),
new(0x00010040, 0x00010040),
new(0x00000041, 0x00000041),
};
new(0x00000041, 0x00000041)
];
InstEncoding[] sizeVdConstraints = new InstEncoding[]
{
InstEncoding[] sizeVdConstraints =
[
new(0x00300000, 0x00300000),
new(0x00001000, 0x00001000),
};
new(0x00001000, 0x00001000)
];
InstEncoding[] qvdQvnQvmConstraints = new InstEncoding[]
{
InstEncoding[] qvdQvnQvmConstraints =
[
new(0x00001040, 0x00001040),
new(0x00010040, 0x00010040),
new(0x00000041, 0x00000041),
};
new(0x00000041, 0x00000041)
];
InstEncoding[] sizeQvdQvmConstraints = new InstEncoding[]
{
InstEncoding[] sizeQvdQvmConstraints =
[
new(0x000C0000, 0x000C0000),
new(0x00001040, 0x00001040),
new(0x00000041, 0x00000041),
};
new(0x00000041, 0x00000041)
];
InstEncoding[] sizeVnVmConstraints = new InstEncoding[]
{
InstEncoding[] sizeVnVmConstraints =
[
new(0x00300000, 0x00300000),
new(0x00010000, 0x00010000),
new(0x00000001, 0x00000001),
};
new(0x00000001, 0x00000001)
];
InstEncoding[] sizeVdOpvnConstraints = new InstEncoding[]
{
InstEncoding[] sizeVdOpvnConstraints =
[
new(0x00300000, 0x00300000),
new(0x00001000, 0x00001000),
new(0x00010100, 0x00010100),
};
new(0x00010100, 0x00010100)
];
InstEncoding[] cmodeCmodeQvdConstraints = new InstEncoding[]
{
InstEncoding[] cmodeCmodeQvdConstraints =
[
new(0x00000000, 0x00000100),
new(0x00000C00, 0x00000C00),
new(0x00001040, 0x00001040),
};
new(0x00001040, 0x00001040)
];
InstEncoding[] qvdQvnQvmOpConstraints = new InstEncoding[]
{
InstEncoding[] qvdQvnQvmOpConstraints =
[
new(0x00001040, 0x00001040),
new(0x00010040, 0x00010040),
new(0x00000041, 0x00000041),
new(0x00000000, 0x00300000),
};
new(0x00000000, 0x00300000)
];
InstEncoding[] qvdQvnQvmSizeConstraints = new InstEncoding[]
{
InstEncoding[] qvdQvnQvmSizeConstraints =
[
new(0x00001040, 0x00001040),
new(0x00010040, 0x00010040),
new(0x00000041, 0x00000041),
new(0x00300000, 0x00300000),
};
new(0x00300000, 0x00300000)
];
InstEncoding[] qvdQvnConstraints = new InstEncoding[]
{
InstEncoding[] qvdQvnConstraints =
[
new(0x00001040, 0x00001040),
new(0x00010040, 0x00010040),
};
new(0x00010040, 0x00010040)
];
InstEncoding[] qvdQvmConstraints = new InstEncoding[]
{
InstEncoding[] qvdQvmConstraints =
[
new(0x00001040, 0x00001040),
new(0x00000041, 0x00000041),
};
new(0x00000041, 0x00000041)
];
InstEncoding[] sizeConstraints = new InstEncoding[]
{
new(0x00000000, 0x00000300),
};
InstEncoding[] sizeConstraints =
[
new(0x00000000, 0x00000300)
];
InstEncoding[] vmConstraints = new InstEncoding[]
{
new(0x00000001, 0x00000001),
};
InstEncoding[] vmConstraints =
[
new(0x00000001, 0x00000001)
];
InstEncoding[] opvdOpvmConstraints = new InstEncoding[]
{
InstEncoding[] opvdOpvmConstraints =
[
new(0x00001100, 0x00001100),
new(0x00000001, 0x00000101),
};
new(0x00000001, 0x00000101)
];
InstEncoding[] imm6Opimm6Imm6QvdQvmConstraints = new InstEncoding[]
{
InstEncoding[] imm6Opimm6Imm6QvdQvmConstraints =
[
new(0x00000000, 0x00380000),
new(0x00200000, 0x00300200),
new(0x00000000, 0x00200000),
new(0x00001040, 0x00001040),
new(0x00000041, 0x00000041),
};
new(0x00000041, 0x00000041)
];
InstEncoding[] condQvdEbConstraints = new InstEncoding[]
{
InstEncoding[] condQvdEbConstraints =
[
new(0xF0000000, 0xF0000000),
new(0x00210000, 0x00210000),
new(0x00400020, 0x00400020),
};
new(0x00400020, 0x00400020)
];
InstEncoding[] imm4QvdConstraints = new InstEncoding[]
{
InstEncoding[] imm4QvdConstraints =
[
new(0x00000000, 0x00070000),
new(0x00001040, 0x00001040),
};
new(0x00001040, 0x00001040)
];
InstEncoding[] qvdQvnQvmQimm4Constraints = new InstEncoding[]
{
InstEncoding[] qvdQvnQvmQimm4Constraints =
[
new(0x00001040, 0x00001040),
new(0x00010040, 0x00010040),
new(0x00000041, 0x00000041),
new(0x00000800, 0x00000840),
};
new(0x00000800, 0x00000840)
];
InstEncoding[] qvdConstraints = new InstEncoding[]
{
new(0x00001040, 0x00001040),
};
InstEncoding[] qvdConstraints =
[
new(0x00001040, 0x00001040)
];
InstEncoding[] vdVnConstraints = new InstEncoding[]
{
InstEncoding[] vdVnConstraints =
[
new(0x00001000, 0x00001000),
new(0x00010000, 0x00010000),
};
new(0x00010000, 0x00010000)
];
InstEncoding[] sizeConstraints2 = new InstEncoding[]
{
new(0x00000C00, 0x00000C00),
};
InstEncoding[] sizeConstraints2 =
[
new(0x00000C00, 0x00000C00)
];
InstEncoding[] sizeIndexAlignIndexAlignConstraints = new InstEncoding[]
{
InstEncoding[] sizeIndexAlignIndexAlignConstraints =
[
new(0x00000C00, 0x00000C00),
new(0x00000010, 0x00000030),
new(0x00000020, 0x00000030),
};
new(0x00000020, 0x00000030)
];
InstEncoding[] sizeSizeaConstraints = new InstEncoding[]
{
InstEncoding[] sizeSizeaConstraints =
[
new(0x000000C0, 0x000000C0),
new(0x00000010, 0x000000D0),
};
new(0x00000010, 0x000000D0)
];
InstEncoding[] alignConstraints = new InstEncoding[]
{
new(0x00000020, 0x00000020),
};
InstEncoding[] alignConstraints =
[
new(0x00000020, 0x00000020)
];
InstEncoding[] alignConstraints2 = new InstEncoding[]
{
InstEncoding[] alignConstraints2 =
[
new(0x00000030, 0x00000030)
];
InstEncoding[] sizeConstraints3 =
[
new(0x000000C0, 0x000000C0)
];
InstEncoding[] alignSizeConstraints =
[
new(0x00000030, 0x00000030),
};
new(0x000000C0, 0x000000C0)
];
InstEncoding[] sizeConstraints3 = new InstEncoding[]
{
InstEncoding[] sizeAConstraints =
[
new(0x000000C0, 0x000000C0),
};
new(0x00000010, 0x00000010)
];
InstEncoding[] alignSizeConstraints = new InstEncoding[]
{
new(0x00000030, 0x00000030),
InstEncoding[] sizeAlignConstraints =
[
new(0x000000C0, 0x000000C0),
};
new(0x00000020, 0x00000020)
];
InstEncoding[] sizeAConstraints = new InstEncoding[]
{
new(0x000000C0, 0x000000C0),
new(0x00000010, 0x00000010),
};
InstEncoding[] sizeAlignConstraints = new InstEncoding[]
{
new(0x000000C0, 0x000000C0),
new(0x00000020, 0x00000020),
};
InstEncoding[] sizeIndexAlignConstraints = new InstEncoding[]
{
InstEncoding[] sizeIndexAlignConstraints =
[
new(0x00000C00, 0x00000C00),
new(0x00000030, 0x00000030),
};
new(0x00000030, 0x00000030)
];
InstEncoding[] sizeaConstraints = new InstEncoding[]
{
new(0x000000C0, 0x000000D0),
};
InstEncoding[] sizeaConstraints =
[
new(0x000000C0, 0x000000D0)
];
InstEncoding[] sizeSizeVdConstraints = new InstEncoding[]
{
InstEncoding[] sizeSizeVdConstraints =
[
new(0x00300000, 0x00300000),
new(0x00000000, 0x00300000),
new(0x00001000, 0x00001000),
};
new(0x00001000, 0x00001000)
];
InstEncoding[] sizeQvdQvnConstraints = new InstEncoding[]
{
InstEncoding[] sizeQvdQvnConstraints =
[
new(0x00300000, 0x00300000),
new(0x01001000, 0x01001000),
new(0x01010000, 0x01010000),
};
new(0x01010000, 0x01010000)
];
InstEncoding[] imm3hImm3hImm3hImm3hImm3hVdConstraints = new InstEncoding[]
{
InstEncoding[] imm3hImm3hImm3hImm3hImm3hVdConstraints =
[
new(0x00000000, 0x00380000),
new(0x00180000, 0x00380000),
new(0x00280000, 0x00380000),
new(0x00300000, 0x00380000),
new(0x00380000, 0x00380000),
new(0x00001000, 0x00001000),
};
new(0x00001000, 0x00001000)
];
InstEncoding[] sizeVmConstraints = new InstEncoding[]
{
InstEncoding[] sizeVmConstraints =
[
new(0x000C0000, 0x000C0000),
new(0x00000001, 0x00000001),
};
new(0x00000001, 0x00000001)
];
InstEncoding[] condOpc1opc2Constraints = new InstEncoding[]
{
InstEncoding[] condOpc1opc2Constraints =
[
new(0xF0000000, 0xF0000000),
new(0x00000040, 0x00400060),
};
new(0x00000040, 0x00400060)
];
InstEncoding[] condUopc1opc2Uopc1opc2Constraints = new InstEncoding[]
{
InstEncoding[] condUopc1opc2Uopc1opc2Constraints =
[
new(0xF0000000, 0xF0000000),
new(0x00800000, 0x00C00060),
new(0x00000040, 0x00400060),
};
new(0x00000040, 0x00400060)
];
InstEncoding[] sizeOpuOpsizeVdConstraints = new InstEncoding[]
{
InstEncoding[] sizeOpuOpsizeVdConstraints =
[
new(0x00300000, 0x00300000),
new(0x01000200, 0x01000200),
new(0x00100200, 0x00300200),
new(0x00001000, 0x00001000),
};
new(0x00001000, 0x00001000)
];
InstEncoding[] sizeOpsizeOpsizeQvdQvnQvmConstraints = new InstEncoding[]
{
InstEncoding[] sizeOpsizeOpsizeQvdQvnQvmConstraints =
[
new(0x00300000, 0x00300000),
new(0x01100000, 0x01300000),
new(0x01200000, 0x01300000),
new(0x00001040, 0x00001040),
new(0x00010040, 0x00010040),
new(0x00000041, 0x00000041),
};
new(0x00000041, 0x00000041)
];
InstEncoding[] cmodeQvdConstraints = new InstEncoding[]
{
InstEncoding[] cmodeQvdConstraints =
[
new(0x00000E00, 0x00000E00),
new(0x00001040, 0x00001040),
};
new(0x00001040, 0x00001040)
];
InstEncoding[] qConstraints = new InstEncoding[]
{
new(0x00000040, 0x00000040),
};
InstEncoding[] qConstraints =
[
new(0x00000040, 0x00000040)
];
InstEncoding[] sizeQConstraints = new InstEncoding[]
{
InstEncoding[] sizeQConstraints =
[
new(0x00300000, 0x00300000),
new(0x00000040, 0x00000040),
};
new(0x00000040, 0x00000040)
];
InstEncoding[] sizeConstraints4 = new InstEncoding[]
{
new(0x00300000, 0x00300000),
};
InstEncoding[] sizeConstraints4 =
[
new(0x00300000, 0x00300000)
];
InstEncoding[] qvdQvnQvmSizeSizeConstraints = new InstEncoding[]
{
InstEncoding[] qvdQvnQvmSizeSizeConstraints =
[
new(0x00001040, 0x00001040),
new(0x00010040, 0x00010040),
new(0x00000041, 0x00000041),
new(0x00000000, 0x00300000),
new(0x00300000, 0x00300000),
};
new(0x00300000, 0x00300000)
];
InstEncoding[] sizeSizeQvdQvnConstraints = new InstEncoding[]
{
InstEncoding[] sizeSizeQvdQvnConstraints =
[
new(0x00300000, 0x00300000),
new(0x00000000, 0x00300000),
new(0x01001000, 0x01001000),
new(0x01010000, 0x01010000),
};
new(0x01010000, 0x01010000)
];
InstEncoding[] opSizeVmConstraints = new InstEncoding[]
{
InstEncoding[] opSizeVmConstraints =
[
new(0x00000000, 0x000000C0),
new(0x000C0000, 0x000C0000),
new(0x00000001, 0x00000001),
};
new(0x00000001, 0x00000001)
];
InstEncoding[] qvdQvmQvnConstraints = new InstEncoding[]
{
InstEncoding[] qvdQvmQvnConstraints =
[
new(0x00001040, 0x00001040),
new(0x00000041, 0x00000041),
new(0x00010040, 0x00010040),
};
new(0x00010040, 0x00010040)
];
InstEncoding[] imm6UopVmConstraints = new InstEncoding[]
{
InstEncoding[] imm6UopVmConstraints =
[
new(0x00000000, 0x00380000),
new(0x00000000, 0x01000100),
new(0x00000001, 0x00000001),
};
new(0x00000001, 0x00000001)
];
InstEncoding[] imm6lUopQvdQvmConstraints = new InstEncoding[]
{
InstEncoding[] imm6lUopQvdQvmConstraints =
[
new(0x00000000, 0x00380080),
new(0x00000000, 0x01000100),
new(0x00001040, 0x00001040),
new(0x00000041, 0x00000041),
};
new(0x00000041, 0x00000041)
];
InstEncoding[] qvdQvmSizeSizeConstraints = new InstEncoding[]
{
InstEncoding[] qvdQvmSizeSizeConstraints =
[
new(0x00001040, 0x00001040),
new(0x00000041, 0x00000041),
new(0x00000000, 0x000C0000),
new(0x000C0000, 0x000C0000),
};
new(0x000C0000, 0x000C0000)
];
InstEncoding[] sizeSizeSizeQvdQvmConstraints = new InstEncoding[]
{
InstEncoding[] sizeSizeSizeQvdQvmConstraints =
[
new(0x00040000, 0x000C0000),
new(0x00080000, 0x000C0000),
new(0x000C0000, 0x000C0000),
new(0x00001040, 0x00001040),
new(0x00000041, 0x00000041),
};
new(0x00000041, 0x00000041)
];
InstEncoding[] sizeSizeQvdQvmConstraints = new InstEncoding[]
{
InstEncoding[] sizeSizeQvdQvmConstraints =
[
new(0x00080000, 0x000C0000),
new(0x000C0000, 0x000C0000),
new(0x00001040, 0x00001040),
new(0x00000041, 0x00000041),
};
new(0x00000041, 0x00000041)
];
InstEncoding[] imm6lQvdQvmConstraints = new InstEncoding[]
{
InstEncoding[] imm6lQvdQvmConstraints =
[
new(0x00000000, 0x00380080),
new(0x00001040, 0x00001040),
new(0x00000041, 0x00000041),
};
new(0x00000041, 0x00000041)
];
InstEncoding[] imm6VmConstraints = new InstEncoding[]
{
InstEncoding[] imm6VmConstraints =
[
new(0x00000000, 0x00380000),
new(0x00000001, 0x00000001),
};
new(0x00000001, 0x00000001)
];
InstEncoding[] imm6VdImm6Imm6Imm6Constraints = new InstEncoding[]
{
InstEncoding[] imm6VdImm6Imm6Imm6Constraints =
[
new(0x00000000, 0x00380000),
new(0x00001000, 0x00001000),
new(0x00080000, 0x003F0000),
new(0x00100000, 0x003F0000),
new(0x00200000, 0x003F0000),
};
new(0x00200000, 0x003F0000)
];
InstEncoding[] sizeVdConstraints2 = new InstEncoding[]
{
InstEncoding[] sizeVdConstraints2 =
[
new(0x000C0000, 0x000C0000),
new(0x00001000, 0x00001000),
};
new(0x00001000, 0x00001000)
];
InstEncoding[] sizeQsizeQvdQvmConstraints = new InstEncoding[]
{
InstEncoding[] sizeQsizeQvdQvmConstraints =
[
new(0x000C0000, 0x000C0000),
new(0x00080000, 0x000C0040),
new(0x00001040, 0x00001040),
new(0x00000041, 0x00000041),
};
new(0x00000041, 0x00000041)
];
List<InstInfoForTable> insts = new()
{
List<InstInfoForTable> insts =
[
new(0x02A00000, 0x0FE00000, condConstraints, InstName.AdcI, T.AdcIA1, IsaVersion.v80, InstFlags.CondRd),
new(0x00A00000, 0x0FE00010, condConstraints, InstName.AdcR, T.AdcRA1, IsaVersion.v80, InstFlags.CondRd),
new(0x00A00010, 0x0FE00090, condConstraints, InstName.AdcRr, T.AdcRrA1, IsaVersion.v80, InstFlags.CondRd),
@@ -1176,7 +1176,7 @@ namespace Ryujinx.Cpu.LightningJit.Arm32
new(0x0320F002, 0x0FFFFFFF, condConstraints, InstName.Wfe, T.WfeA1, IsaVersion.v80, InstFlags.Cond),
new(0x0320F003, 0x0FFFFFFF, condConstraints, InstName.Wfi, T.WfiA1, IsaVersion.v80, InstFlags.Cond),
new(0x0320F001, 0x0FFFFFFF, condConstraints, InstName.Yield, T.YieldA1, IsaVersion.v80, InstFlags.Cond),
};
];
_table = new(insts);
}
@@ -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);
}
+325 -325
View File
@@ -9,525 +9,525 @@ namespace Ryujinx.Cpu.LightningJit.Arm32
static InstTableT32()
{
InstEncoding[] rnRdsConstraints = new InstEncoding[]
{
InstEncoding[] rnRdsConstraints =
[
new(0x000D0000, 0x000F0000),
new(0x00100F00, 0x00100F00),
};
new(0x00100F00, 0x00100F00)
];
InstEncoding[] rnRnConstraints = new InstEncoding[]
{
InstEncoding[] rnRnConstraints =
[
new(0x000D0000, 0x000F0000),
new(0x000F0000, 0x000F0000),
};
new(0x000F0000, 0x000F0000)
];
InstEncoding[] rdsConstraints = new InstEncoding[]
{
new(0x00100F00, 0x00100F00),
};
InstEncoding[] rdsConstraints =
[
new(0x00100F00, 0x00100F00)
];
InstEncoding[] vdVmConstraints = new InstEncoding[]
{
InstEncoding[] vdVmConstraints =
[
new(0x00001000, 0x00001000),
new(0x00000001, 0x00000001),
};
new(0x00000001, 0x00000001)
];
InstEncoding[] condCondCondConstraints = new InstEncoding[]
{
InstEncoding[] condCondCondConstraints =
[
new(0x03800000, 0x03C00000),
new(0x03C00000, 0x03C00000),
new(0x03800000, 0x03800000),
};
new(0x03800000, 0x03800000)
];
InstEncoding[] rnConstraints = new InstEncoding[]
{
new(0x000F0000, 0x000F0000),
};
InstEncoding[] rnConstraints =
[
new(0x000F0000, 0x000F0000)
];
InstEncoding[] hConstraints = new InstEncoding[]
{
new(0x00000001, 0x00000001),
};
InstEncoding[] hConstraints =
[
new(0x00000001, 0x00000001)
];
InstEncoding[] imodmConstraints = new InstEncoding[]
{
new(0x00000000, 0x00000700),
};
InstEncoding[] imodmConstraints =
[
new(0x00000000, 0x00000700)
];
InstEncoding[] optionConstraints = new InstEncoding[]
{
new(0x00000000, 0x0000000F),
};
InstEncoding[] optionConstraints =
[
new(0x00000000, 0x0000000F)
];
InstEncoding[] puwPwPuwPuwConstraints = new InstEncoding[]
{
InstEncoding[] puwPwPuwPuwConstraints =
[
new(0x00000000, 0x01A00000),
new(0x01000000, 0x01200000),
new(0x00200000, 0x01A00000),
new(0x01A00000, 0x01A00000),
};
new(0x01A00000, 0x01A00000)
];
InstEncoding[] rnPuwConstraints = new InstEncoding[]
{
InstEncoding[] rnPuwConstraints =
[
new(0x000F0000, 0x000F0000),
new(0x00000000, 0x01A00000),
};
new(0x00000000, 0x01A00000)
];
InstEncoding[] puwConstraints = new InstEncoding[]
{
new(0x00000000, 0x01A00000),
};
InstEncoding[] puwConstraints =
[
new(0x00000000, 0x01A00000)
];
InstEncoding[] rnRtConstraints = new InstEncoding[]
{
InstEncoding[] rnRtConstraints =
[
new(0x000F0000, 0x000F0000),
new(0x0000F000, 0x0000F000),
};
new(0x0000F000, 0x0000F000)
];
InstEncoding[] rnRtpuwPuwPwConstraints = new InstEncoding[]
{
InstEncoding[] rnRtpuwPuwPwConstraints =
[
new(0x000F0000, 0x000F0000),
new(0x0000F400, 0x0000F700),
new(0x00000600, 0x00000700),
new(0x00000000, 0x00000500),
};
new(0x00000000, 0x00000500)
];
InstEncoding[] rtConstraints = new InstEncoding[]
{
new(0x0000F000, 0x0000F000),
};
InstEncoding[] rtConstraints =
[
new(0x0000F000, 0x0000F000)
];
InstEncoding[] rnPwConstraints = new InstEncoding[]
{
InstEncoding[] rnPwConstraints =
[
new(0x000F0000, 0x000F0000),
new(0x00000000, 0x01200000),
};
new(0x00000000, 0x01200000)
];
InstEncoding[] pwConstraints = new InstEncoding[]
{
new(0x00000000, 0x01200000),
};
InstEncoding[] pwConstraints =
[
new(0x00000000, 0x01200000)
];
InstEncoding[] rnPuwPwConstraints = new InstEncoding[]
{
InstEncoding[] rnPuwPwConstraints =
[
new(0x000F0000, 0x000F0000),
new(0x00000600, 0x00000700),
new(0x00000000, 0x00000500),
};
new(0x00000000, 0x00000500)
];
InstEncoding[] raConstraints = new InstEncoding[]
{
new(0x0000F000, 0x0000F000),
};
InstEncoding[] raConstraints =
[
new(0x0000F000, 0x0000F000)
];
InstEncoding[] sTConstraints = new InstEncoding[]
{
InstEncoding[] sTConstraints =
[
new(0x00100000, 0x00100000),
new(0x00000010, 0x00000010),
};
new(0x00000010, 0x00000010)
];
InstEncoding[] vdVnVmConstraints = new InstEncoding[]
{
InstEncoding[] vdVnVmConstraints =
[
new(0x00001000, 0x00001000),
new(0x00010000, 0x00010000),
new(0x00000001, 0x00000001),
};
new(0x00000001, 0x00000001)
];
InstEncoding[] shimm2imm3Constraints = new InstEncoding[]
{
new(0x00200000, 0x002070C0),
};
InstEncoding[] shimm2imm3Constraints =
[
new(0x00200000, 0x002070C0)
];
InstEncoding[] rnimm8Constraints = new InstEncoding[]
{
new(0x000E0000, 0x000F00FF),
};
InstEncoding[] rnimm8Constraints =
[
new(0x000E0000, 0x000F00FF)
];
InstEncoding[] sizeQvdQvnQvmConstraints = new InstEncoding[]
{
InstEncoding[] sizeQvdQvnQvmConstraints =
[
new(0x00300000, 0x00300000),
new(0x00001040, 0x00001040),
new(0x00010040, 0x00010040),
new(0x00000041, 0x00000041),
};
new(0x00000041, 0x00000041)
];
InstEncoding[] sizeVdConstraints = new InstEncoding[]
{
InstEncoding[] sizeVdConstraints =
[
new(0x00300000, 0x00300000),
new(0x00001000, 0x00001000),
};
new(0x00001000, 0x00001000)
];
InstEncoding[] qvdQvnQvmConstraints = new InstEncoding[]
{
InstEncoding[] qvdQvnQvmConstraints =
[
new(0x00001040, 0x00001040),
new(0x00010040, 0x00010040),
new(0x00000041, 0x00000041),
};
new(0x00000041, 0x00000041)
];
InstEncoding[] sizeQvdQvmConstraints = new InstEncoding[]
{
InstEncoding[] sizeQvdQvmConstraints =
[
new(0x000C0000, 0x000C0000),
new(0x00001040, 0x00001040),
new(0x00000041, 0x00000041),
};
new(0x00000041, 0x00000041)
];
InstEncoding[] sizeVnVmConstraints = new InstEncoding[]
{
InstEncoding[] sizeVnVmConstraints =
[
new(0x00300000, 0x00300000),
new(0x00010000, 0x00010000),
new(0x00000001, 0x00000001),
};
new(0x00000001, 0x00000001)
];
InstEncoding[] sizeVdOpvnConstraints = new InstEncoding[]
{
InstEncoding[] sizeVdOpvnConstraints =
[
new(0x00300000, 0x00300000),
new(0x00001000, 0x00001000),
new(0x00010100, 0x00010100),
};
new(0x00010100, 0x00010100)
];
InstEncoding[] cmodeCmodeQvdConstraints = new InstEncoding[]
{
InstEncoding[] cmodeCmodeQvdConstraints =
[
new(0x00000000, 0x00000100),
new(0x00000C00, 0x00000C00),
new(0x00001040, 0x00001040),
};
new(0x00001040, 0x00001040)
];
InstEncoding[] qvdQvnQvmOpConstraints = new InstEncoding[]
{
InstEncoding[] qvdQvnQvmOpConstraints =
[
new(0x00001040, 0x00001040),
new(0x00010040, 0x00010040),
new(0x00000041, 0x00000041),
new(0x00000000, 0x00300000),
};
new(0x00000000, 0x00300000)
];
InstEncoding[] qvdQvnQvmSizeConstraints = new InstEncoding[]
{
InstEncoding[] qvdQvnQvmSizeConstraints =
[
new(0x00001040, 0x00001040),
new(0x00010040, 0x00010040),
new(0x00000041, 0x00000041),
new(0x00300000, 0x00300000),
};
new(0x00300000, 0x00300000)
];
InstEncoding[] qvdQvnConstraints = new InstEncoding[]
{
InstEncoding[] qvdQvnConstraints =
[
new(0x00001040, 0x00001040),
new(0x00010040, 0x00010040),
};
new(0x00010040, 0x00010040)
];
InstEncoding[] qvdQvmConstraints = new InstEncoding[]
{
InstEncoding[] qvdQvmConstraints =
[
new(0x00001040, 0x00001040),
new(0x00000041, 0x00000041),
};
new(0x00000041, 0x00000041)
];
InstEncoding[] sizeConstraints = new InstEncoding[]
{
new(0x00000000, 0x00000300),
};
InstEncoding[] sizeConstraints =
[
new(0x00000000, 0x00000300)
];
InstEncoding[] vmConstraints = new InstEncoding[]
{
new(0x00000001, 0x00000001),
};
InstEncoding[] vmConstraints =
[
new(0x00000001, 0x00000001)
];
InstEncoding[] opvdOpvmConstraints = new InstEncoding[]
{
InstEncoding[] opvdOpvmConstraints =
[
new(0x00001100, 0x00001100),
new(0x00000001, 0x00000101),
};
new(0x00000001, 0x00000101)
];
InstEncoding[] imm6Opimm6Imm6QvdQvmConstraints = new InstEncoding[]
{
InstEncoding[] imm6Opimm6Imm6QvdQvmConstraints =
[
new(0x00000000, 0x00380000),
new(0x00200000, 0x00300200),
new(0x00000000, 0x00200000),
new(0x00001040, 0x00001040),
new(0x00000041, 0x00000041),
};
new(0x00000041, 0x00000041)
];
InstEncoding[] qvdEbConstraints = new InstEncoding[]
{
InstEncoding[] qvdEbConstraints =
[
new(0x00210000, 0x00210000),
new(0x00400020, 0x00400020),
};
new(0x00400020, 0x00400020)
];
InstEncoding[] imm4QvdConstraints = new InstEncoding[]
{
InstEncoding[] imm4QvdConstraints =
[
new(0x00000000, 0x00070000),
new(0x00001040, 0x00001040),
};
new(0x00001040, 0x00001040)
];
InstEncoding[] qvdQvnQvmQimm4Constraints = new InstEncoding[]
{
InstEncoding[] qvdQvnQvmQimm4Constraints =
[
new(0x00001040, 0x00001040),
new(0x00010040, 0x00010040),
new(0x00000041, 0x00000041),
new(0x00000800, 0x00000840),
};
new(0x00000800, 0x00000840)
];
InstEncoding[] qvdConstraints = new InstEncoding[]
{
new(0x00001040, 0x00001040),
};
InstEncoding[] qvdConstraints =
[
new(0x00001040, 0x00001040)
];
InstEncoding[] vdVnConstraints = new InstEncoding[]
{
InstEncoding[] vdVnConstraints =
[
new(0x00001000, 0x00001000),
new(0x00010000, 0x00010000),
};
new(0x00010000, 0x00010000)
];
InstEncoding[] sizeConstraints2 = new InstEncoding[]
{
new(0x00000C00, 0x00000C00),
};
InstEncoding[] sizeConstraints2 =
[
new(0x00000C00, 0x00000C00)
];
InstEncoding[] sizeIndexAlignIndexAlignConstraints = new InstEncoding[]
{
InstEncoding[] sizeIndexAlignIndexAlignConstraints =
[
new(0x00000C00, 0x00000C00),
new(0x00000010, 0x00000030),
new(0x00000020, 0x00000030),
};
new(0x00000020, 0x00000030)
];
InstEncoding[] sizeSizeaConstraints = new InstEncoding[]
{
InstEncoding[] sizeSizeaConstraints =
[
new(0x000000C0, 0x000000C0),
new(0x00000010, 0x000000D0),
};
new(0x00000010, 0x000000D0)
];
InstEncoding[] alignConstraints = new InstEncoding[]
{
new(0x00000020, 0x00000020),
};
InstEncoding[] alignConstraints =
[
new(0x00000020, 0x00000020)
];
InstEncoding[] alignConstraints2 = new InstEncoding[]
{
InstEncoding[] alignConstraints2 =
[
new(0x00000030, 0x00000030)
];
InstEncoding[] sizeConstraints3 =
[
new(0x000000C0, 0x000000C0)
];
InstEncoding[] alignSizeConstraints =
[
new(0x00000030, 0x00000030),
};
new(0x000000C0, 0x000000C0)
];
InstEncoding[] sizeConstraints3 = new InstEncoding[]
{
InstEncoding[] sizeAConstraints =
[
new(0x000000C0, 0x000000C0),
};
new(0x00000010, 0x00000010)
];
InstEncoding[] alignSizeConstraints = new InstEncoding[]
{
new(0x00000030, 0x00000030),
InstEncoding[] sizeAlignConstraints =
[
new(0x000000C0, 0x000000C0),
};
new(0x00000020, 0x00000020)
];
InstEncoding[] sizeAConstraints = new InstEncoding[]
{
new(0x000000C0, 0x000000C0),
new(0x00000010, 0x00000010),
};
InstEncoding[] sizeAlignConstraints = new InstEncoding[]
{
new(0x000000C0, 0x000000C0),
new(0x00000020, 0x00000020),
};
InstEncoding[] sizeIndexAlignConstraints = new InstEncoding[]
{
InstEncoding[] sizeIndexAlignConstraints =
[
new(0x00000C00, 0x00000C00),
new(0x00000030, 0x00000030),
};
new(0x00000030, 0x00000030)
];
InstEncoding[] sizeaConstraints = new InstEncoding[]
{
new(0x000000C0, 0x000000D0),
};
InstEncoding[] sizeaConstraints =
[
new(0x000000C0, 0x000000D0)
];
InstEncoding[] sizeSizeVdConstraints = new InstEncoding[]
{
InstEncoding[] sizeSizeVdConstraints =
[
new(0x00300000, 0x00300000),
new(0x00000000, 0x00300000),
new(0x00001000, 0x00001000),
};
new(0x00001000, 0x00001000)
];
InstEncoding[] sizeQvdQvnConstraints = new InstEncoding[]
{
InstEncoding[] sizeQvdQvnConstraints =
[
new(0x00300000, 0x00300000),
new(0x10001000, 0x10001000),
new(0x10010000, 0x10010000),
};
new(0x10010000, 0x10010000)
];
InstEncoding[] imm3hImm3hImm3hImm3hImm3hVdConstraints = new InstEncoding[]
{
InstEncoding[] imm3hImm3hImm3hImm3hImm3hVdConstraints =
[
new(0x00000000, 0x00380000),
new(0x00180000, 0x00380000),
new(0x00280000, 0x00380000),
new(0x00300000, 0x00380000),
new(0x00380000, 0x00380000),
new(0x00001000, 0x00001000),
};
new(0x00001000, 0x00001000)
];
InstEncoding[] sizeVmConstraints = new InstEncoding[]
{
InstEncoding[] sizeVmConstraints =
[
new(0x000C0000, 0x000C0000),
new(0x00000001, 0x00000001),
};
new(0x00000001, 0x00000001)
];
InstEncoding[] opc1opc2Constraints = new InstEncoding[]
{
new(0x00000040, 0x00400060),
};
InstEncoding[] opc1opc2Constraints =
[
new(0x00000040, 0x00400060)
];
InstEncoding[] uopc1opc2Uopc1opc2Constraints = new InstEncoding[]
{
InstEncoding[] uopc1opc2Uopc1opc2Constraints =
[
new(0x00800000, 0x00C00060),
new(0x00000040, 0x00400060),
};
new(0x00000040, 0x00400060)
];
InstEncoding[] sizeOpuOpsizeVdConstraints = new InstEncoding[]
{
InstEncoding[] sizeOpuOpsizeVdConstraints =
[
new(0x00300000, 0x00300000),
new(0x10000200, 0x10000200),
new(0x00100200, 0x00300200),
new(0x00001000, 0x00001000),
};
new(0x00001000, 0x00001000)
];
InstEncoding[] sizeOpsizeOpsizeQvdQvnQvmConstraints = new InstEncoding[]
{
InstEncoding[] sizeOpsizeOpsizeQvdQvnQvmConstraints =
[
new(0x00300000, 0x00300000),
new(0x10100000, 0x10300000),
new(0x10200000, 0x10300000),
new(0x00001040, 0x00001040),
new(0x00010040, 0x00010040),
new(0x00000041, 0x00000041),
};
new(0x00000041, 0x00000041)
];
InstEncoding[] cmodeQvdConstraints = new InstEncoding[]
{
InstEncoding[] cmodeQvdConstraints =
[
new(0x00000E00, 0x00000E00),
new(0x00001040, 0x00001040),
};
new(0x00001040, 0x00001040)
];
InstEncoding[] qConstraints = new InstEncoding[]
{
new(0x00000040, 0x00000040),
};
InstEncoding[] qConstraints =
[
new(0x00000040, 0x00000040)
];
InstEncoding[] sizeQConstraints = new InstEncoding[]
{
InstEncoding[] sizeQConstraints =
[
new(0x00300000, 0x00300000),
new(0x00000040, 0x00000040),
};
new(0x00000040, 0x00000040)
];
InstEncoding[] sizeConstraints4 = new InstEncoding[]
{
new(0x00300000, 0x00300000),
};
InstEncoding[] sizeConstraints4 =
[
new(0x00300000, 0x00300000)
];
InstEncoding[] qvdQvnQvmSizeSizeConstraints = new InstEncoding[]
{
InstEncoding[] qvdQvnQvmSizeSizeConstraints =
[
new(0x00001040, 0x00001040),
new(0x00010040, 0x00010040),
new(0x00000041, 0x00000041),
new(0x00000000, 0x00300000),
new(0x00300000, 0x00300000),
};
new(0x00300000, 0x00300000)
];
InstEncoding[] sizeSizeQvdQvnConstraints = new InstEncoding[]
{
InstEncoding[] sizeSizeQvdQvnConstraints =
[
new(0x00300000, 0x00300000),
new(0x00000000, 0x00300000),
new(0x10001000, 0x10001000),
new(0x10010000, 0x10010000),
};
new(0x10010000, 0x10010000)
];
InstEncoding[] opSizeVmConstraints = new InstEncoding[]
{
InstEncoding[] opSizeVmConstraints =
[
new(0x00000000, 0x000000C0),
new(0x000C0000, 0x000C0000),
new(0x00000001, 0x00000001),
};
new(0x00000001, 0x00000001)
];
InstEncoding[] qvdQvmQvnConstraints = new InstEncoding[]
{
InstEncoding[] qvdQvmQvnConstraints =
[
new(0x00001040, 0x00001040),
new(0x00000041, 0x00000041),
new(0x00010040, 0x00010040),
};
new(0x00010040, 0x00010040)
];
InstEncoding[] imm6UopVmConstraints = new InstEncoding[]
{
InstEncoding[] imm6UopVmConstraints =
[
new(0x00000000, 0x00380000),
new(0x00000000, 0x10000100),
new(0x00000001, 0x00000001),
};
new(0x00000001, 0x00000001)
];
InstEncoding[] imm6lUopQvdQvmConstraints = new InstEncoding[]
{
InstEncoding[] imm6lUopQvdQvmConstraints =
[
new(0x00000000, 0x00380080),
new(0x00000000, 0x10000100),
new(0x00001040, 0x00001040),
new(0x00000041, 0x00000041),
};
new(0x00000041, 0x00000041)
];
InstEncoding[] qvdQvmSizeSizeConstraints = new InstEncoding[]
{
InstEncoding[] qvdQvmSizeSizeConstraints =
[
new(0x00001040, 0x00001040),
new(0x00000041, 0x00000041),
new(0x00000000, 0x000C0000),
new(0x000C0000, 0x000C0000),
};
new(0x000C0000, 0x000C0000)
];
InstEncoding[] sizeSizeSizeQvdQvmConstraints = new InstEncoding[]
{
InstEncoding[] sizeSizeSizeQvdQvmConstraints =
[
new(0x00040000, 0x000C0000),
new(0x00080000, 0x000C0000),
new(0x000C0000, 0x000C0000),
new(0x00001040, 0x00001040),
new(0x00000041, 0x00000041),
};
new(0x00000041, 0x00000041)
];
InstEncoding[] sizeSizeQvdQvmConstraints = new InstEncoding[]
{
InstEncoding[] sizeSizeQvdQvmConstraints =
[
new(0x00080000, 0x000C0000),
new(0x000C0000, 0x000C0000),
new(0x00001040, 0x00001040),
new(0x00000041, 0x00000041),
};
new(0x00000041, 0x00000041)
];
InstEncoding[] imm6lQvdQvmConstraints = new InstEncoding[]
{
InstEncoding[] imm6lQvdQvmConstraints =
[
new(0x00000000, 0x00380080),
new(0x00001040, 0x00001040),
new(0x00000041, 0x00000041),
};
new(0x00000041, 0x00000041)
];
InstEncoding[] imm6VmConstraints = new InstEncoding[]
{
InstEncoding[] imm6VmConstraints =
[
new(0x00000000, 0x00380000),
new(0x00000001, 0x00000001),
};
new(0x00000001, 0x00000001)
];
InstEncoding[] imm6VdImm6Imm6Imm6Constraints = new InstEncoding[]
{
InstEncoding[] imm6VdImm6Imm6Imm6Constraints =
[
new(0x00000000, 0x00380000),
new(0x00001000, 0x00001000),
new(0x00080000, 0x003F0000),
new(0x00100000, 0x003F0000),
new(0x00200000, 0x003F0000),
};
new(0x00200000, 0x003F0000)
];
InstEncoding[] sizeVdConstraints2 = new InstEncoding[]
{
InstEncoding[] sizeVdConstraints2 =
[
new(0x000C0000, 0x000C0000),
new(0x00001000, 0x00001000),
};
new(0x00001000, 0x00001000)
];
InstEncoding[] sizeQsizeQvdQvmConstraints = new InstEncoding[]
{
InstEncoding[] sizeQsizeQvdQvmConstraints =
[
new(0x000C0000, 0x000C0000),
new(0x00080000, 0x000C0040),
new(0x00001040, 0x00001040),
new(0x00000041, 0x00000041),
};
new(0x00000041, 0x00000041)
];
List<InstInfoForTable> insts = new()
{
List<InstInfoForTable> insts =
[
new(0xF1400000, 0xFBE08000, InstName.AdcI, T.AdcIT1, IsaVersion.v80, InstFlags.Rd),
new(0xEB400000, 0xFFE08000, InstName.AdcR, T.AdcRT2, IsaVersion.v80, InstFlags.Rd),
new(0xF1000000, 0xFBE08000, rnRdsConstraints, InstName.AddI, T.AddIT3, IsaVersion.v80, InstFlags.Rd),
@@ -1190,7 +1190,7 @@ namespace Ryujinx.Cpu.LightningJit.Arm32
new(0xF3AF8002, 0xFFFFFFFF, InstName.Wfe, T.WfeT2, IsaVersion.v80, InstFlags.None),
new(0xF3AF8003, 0xFFFFFFFF, InstName.Wfi, T.WfiT2, IsaVersion.v80, InstFlags.None),
new(0xF3AF8001, 0xFFFFFFFF, InstName.Yield, T.YieldT2, IsaVersion.v80, InstFlags.None),
};
];
_table = new(insts);
}
+2 -2
View File
@@ -25,8 +25,8 @@ namespace Ryujinx.Cpu.LightningJit.Arm64
{
Debug.Assert((int)((endAddress - address) / 4) == instructions.Count);
_predecessors = new();
_successors = new();
_predecessors = [];
_successors = [];
Address = address;
EndAddress = endAddress;
Instructions = instructions;
@@ -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()
@@ -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)
+1 -1
View File
@@ -12,7 +12,7 @@ namespace Ryujinx.Cpu.LightningJit
public CodeWriter()
{
_instructions = new();
_instructions = [];
}
public void WriteInstruction(uint instruction)
@@ -34,7 +34,7 @@ namespace Ryujinx.Cpu.LightningJit.Table
{
int splitIndex = (int)((insts[index].Encoding >> _shift) & _mask);
(splitList[splitIndex] ??= new()).Add(insts[index]);
(splitList[splitIndex] ??= []).Add(insts[index]);
}
for (int index = 0; index < count; index++)
+1 -1
View File
@@ -134,7 +134,7 @@ namespace Ryujinx.Cpu.LightningJit
public void InvalidateJitCacheRegion(ulong address, ulong size)
{
ulong[] overlapAddresses = Array.Empty<ulong>();
ulong[] overlapAddresses = [];
int overlapsCount = Functions.GetOverlaps(address, size, ref overlapAddresses);
@@ -140,7 +140,7 @@ namespace Ryujinx.Cpu.LightningJit
/// <returns>Generated <see cref="DispatchStub"/></returns>
private nint GenerateDispatchStub()
{
List<int> branchToFallbackOffsets = new();
List<int> branchToFallbackOffsets = [];
CodeWriter writer = new();