mirror of
https://github.com/FEX-Emu/FEX.git
synced 2026-10-06 13:00:15 +02:00
367 lines
11 KiB
JSON
367 lines
11 KiB
JSON
{
|
|
"Features": {
|
|
"Bitness": 32,
|
|
"EnabledHostFeatures": [
|
|
"FLAGM",
|
|
"FLAGM2"
|
|
],
|
|
"DisabledHostFeatures": [
|
|
"SVE128",
|
|
"SVE256",
|
|
"AFP"
|
|
],
|
|
"BinaryCacheVersion": 7
|
|
},
|
|
"Instructions": {
|
|
"Sonic Mania movie player": {
|
|
"x86InstructionCount": 10,
|
|
"ExpectedInstructionCount": 15,
|
|
"Comment": "Used to be hottest block in Sonic Mania",
|
|
"x86Insts": [
|
|
"movzx edx, byte [esi+ecx]",
|
|
"movzx ecx, byte [esi+edi]",
|
|
"or edx, 0xffff0000",
|
|
"shl edx, 0x8",
|
|
"inc esi",
|
|
"or edx, ecx",
|
|
"mov ecx, dword [ebp+0xc]",
|
|
"or dword [eax], edx",
|
|
"add eax, 0x4",
|
|
"cmp esi, ebx"
|
|
],
|
|
"ExpectedArm64ASM": [
|
|
"add w20, w10, w7",
|
|
"ldrb w5, [x20]",
|
|
"add w20, w10, w11",
|
|
"ldrb w7, [x20]",
|
|
"orr w5, w5, #0xffff0000",
|
|
"lsl w5, w5, #8",
|
|
"add w10, w10, #0x1 (1)",
|
|
"orr w5, w5, w7",
|
|
"ldr w7, [x9, #12]",
|
|
"ldr w20, [x4]",
|
|
"orr w20, w20, w5",
|
|
"str w20, [x4]",
|
|
"add w4, w4, #0x4 (4)",
|
|
"eor x27, x10, x6",
|
|
"subs w26, w10, w6"
|
|
]
|
|
},
|
|
"wine mscrt.dll memmove": {
|
|
"x86InstructionCount": 12,
|
|
"ExpectedInstructionCount": 13,
|
|
"Comment": "Hot in Sonic Mania",
|
|
"x86Insts": [
|
|
"movdqu xmm0, [esi]",
|
|
"movdqu xmm1, [esi+0x10]",
|
|
"movdqu xmm2, [esi+0x20]",
|
|
"movdqu xmm3, [esi+0x30]",
|
|
"movdqa [edi], xmm0",
|
|
"movdqa [edi+0x10], xmm1",
|
|
"movdqa [edi+0x20], xmm2",
|
|
"movdqa [edi+0x30], xmm3",
|
|
"add esi, 0x40",
|
|
"add edi, 0x40",
|
|
"sub ecx, 0x40",
|
|
"cmp ecx, 0x40"
|
|
],
|
|
"ExpectedArm64ASM": [
|
|
"ldr q16, [x10]",
|
|
"ldr q17, [x10, #16]",
|
|
"ldr q18, [x10, #32]",
|
|
"ldr q19, [x10, #48]",
|
|
"str q16, [x11]",
|
|
"str q17, [x11, #16]",
|
|
"str q18, [x11, #32]",
|
|
"str q19, [x11, #48]",
|
|
"add w10, w10, #0x40 (64)",
|
|
"add w11, w11, #0x40 (64)",
|
|
"sub w7, w7, #0x40 (64)",
|
|
"subs w26, w7, #0x40 (64)",
|
|
"mov x27, x7"
|
|
]
|
|
},
|
|
"dxvk hotblock from MGRR": {
|
|
"x86InstructionCount": 14,
|
|
"ExpectedInstructionCount": 27,
|
|
"Comment": [
|
|
"Hottest block in Metal Gear Rising: Revengeance render thread"
|
|
],
|
|
"x86Insts": [
|
|
"mov edx, dword [eax+0xc]",
|
|
"mov eax, dword [eax+0x8]",
|
|
"mov dword [ebp-0x34], esi",
|
|
"mov ecx, eax",
|
|
"mov ebx, edx",
|
|
"mov esi, dword [ebp-0x24]",
|
|
"add ecx, 0xffffffff",
|
|
"adc ebx, 0xffffffff",
|
|
"mov dword [ebp-0x28], ecx",
|
|
"mov dword [ebp-0x2c], ebx",
|
|
"mov ebx, ecx",
|
|
"mov dword [ebp-0x30], ecx",
|
|
"mov ecx, dword [ebp-0x2c]",
|
|
"lock cmpxchg8b qword [esi+0x8]"
|
|
],
|
|
"ExpectedArm64ASM": [
|
|
"ldr w5, [x4, #12]",
|
|
"ldr w4, [x4, #8]",
|
|
"stur w10, [x9, #-52]",
|
|
"mov x7, x4",
|
|
"mov x6, x5",
|
|
"ldur w10, [x9, #-36]",
|
|
"mov w20, #0xffffffff",
|
|
"subs w7, w7, #0x1 (1)",
|
|
"mvn w27, w6",
|
|
"adcs w26, w6, w20",
|
|
"mov x6, x26",
|
|
"stur w7, [x9, #-40]",
|
|
"stur w6, [x9, #-44]",
|
|
"mov x6, x7",
|
|
"stur w7, [x9, #-48]",
|
|
"ldur w7, [x9, #-44]",
|
|
"add w20, w10, #0x8 (8)",
|
|
"mov x22, x4",
|
|
"mov x23, x5",
|
|
"caspal w22, w23, w6, w7, [x20]",
|
|
"mrs x0, nzcv",
|
|
"cmp w22, w4",
|
|
"ccmp w23, w5, #nzcv, eq",
|
|
"rmif x0, #28, #NzCV",
|
|
"csel x4, x22, x4, ne",
|
|
"csel x5, x23, x5, ne",
|
|
"cfinv"
|
|
]
|
|
},
|
|
"Psychonauts matrix swizzle": {
|
|
"x86InstructionCount": 103,
|
|
"ExpectedInstructionCount": 113,
|
|
"Comment": [
|
|
"Hottest block in Windows Psychonauts",
|
|
"Doing a 4x4 32-bit float matrix swizzle",
|
|
"Only data movement, no manipulation of the floats"
|
|
],
|
|
"x86Insts": [
|
|
"push ebp",
|
|
"mov ebp, esp",
|
|
"sub esp, 0x44",
|
|
"mov [ebp-0x44], ecx",
|
|
"mov eax, dword [ebp-0x44]",
|
|
"fld dword [eax]",
|
|
"fstp dword [ebp-0x40]",
|
|
"mov ecx, dword [ebp-0x44]",
|
|
"fld dword [ecx+0x10]",
|
|
"fstp dword [ebp-0x3c]",
|
|
"mov edx, dword [ebp-0x44]",
|
|
"fld dword [edx+0x20]",
|
|
"fstp dword [ebp-0x38]",
|
|
"mov eax, dword [ebp-0x44]",
|
|
"fld dword [eax+0x30]",
|
|
"fstp dword [ebp-0x34]",
|
|
"mov ecx, dword [ebp-0x44]",
|
|
"fld dword [ecx+0x4]",
|
|
"fstp dword [ebp-0x30]",
|
|
"mov edx, dword [ebp-0x44]",
|
|
"fld dword [edx+0x14]",
|
|
"fstp dword [ebp-0x2c]",
|
|
"mov eax, dword [ebp-0x44]",
|
|
"fld dword [eax+0x24]",
|
|
"fstp dword [ebp-0x28]",
|
|
"mov ecx, dword [ebp-0x44]",
|
|
"fld dword [ecx+0x34]",
|
|
"fstp dword [ebp-0x24]",
|
|
"mov edx, dword [ebp-0x44]",
|
|
"fld dword [edx+0x8]",
|
|
"fstp dword [ebp-0x20]",
|
|
"mov eax, dword [ebp-0x44]",
|
|
"fld dword [eax+0x18]",
|
|
"fstp dword [ebp-0x1c]",
|
|
"mov ecx, dword [ebp-0x44]",
|
|
"fld dword [ecx+0x28]",
|
|
"fstp dword [ebp-0x18]",
|
|
"mov edx, dword [ebp-0x44]",
|
|
"fld dword [edx+0x38]",
|
|
"fstp dword [ebp-0x14]",
|
|
"mov eax, dword [ebp-0x44]",
|
|
"fld dword [eax+0xc]",
|
|
"fstp dword [ebp-0x10]",
|
|
"mov ecx, dword [ebp-0x44]",
|
|
"fld dword [ecx+0x1c]",
|
|
"fstp dword [ebp-0xc]",
|
|
"mov edx, dword [ebp-0x44]",
|
|
"fld dword [edx+0x2c]",
|
|
"fstp dword [ebp-0x8]",
|
|
"mov eax, dword [ebp-0x44]",
|
|
"fld dword [eax+0x3c]",
|
|
"fstp dword [ebp-0x4]",
|
|
"mov ecx, dword [ebp+0x8]",
|
|
"fld dword [ebp-0x40]",
|
|
"fstp dword [ecx]",
|
|
"mov edx, dword [ebp+0x8]",
|
|
"fld dword [ebp-0x3c]",
|
|
"fstp dword [edx+0x4]",
|
|
"mov eax, dword [ebp+0x8]",
|
|
"fld dword [ebp-0x38]",
|
|
"fstp dword [eax+0x8]",
|
|
"mov ecx, dword [ebp+0x8]",
|
|
"fld dword [ebp-0x34]",
|
|
"fstp dword [ecx+0xc]",
|
|
"mov edx, dword [ebp+0x8]",
|
|
"fld dword [ebp-0x30]",
|
|
"fstp dword [edx+0x10]",
|
|
"mov eax, dword [ebp+0x8]",
|
|
"fld dword [ebp-0x2c]",
|
|
"fstp dword [eax+0x14]",
|
|
"mov ecx, dword [ebp+0x8]",
|
|
"fld dword [ebp-0x28]",
|
|
"fstp dword [ecx+0x18]",
|
|
"mov edx, dword [ebp+0x8]",
|
|
"fld dword [ebp-0x24]",
|
|
"fstp dword [edx+0x1c]",
|
|
"mov eax, dword [ebp+0x8]",
|
|
"fld dword [ebp-0x20]",
|
|
"fstp dword [eax+0x20]",
|
|
"mov ecx, dword [ebp+0x8]",
|
|
"fld dword [ebp-0x1c]",
|
|
"fstp dword [ecx+0x24]",
|
|
"mov edx, dword [ebp+0x8]",
|
|
"fld dword [ebp-0x18]",
|
|
"fstp dword [edx+0x28]",
|
|
"mov eax, dword [ebp+0x8]",
|
|
"fld dword [ebp-0x14]",
|
|
"fstp dword [eax+0x2c]",
|
|
"mov ecx, dword [ebp+0x8]",
|
|
"fld dword [ebp-0x10]",
|
|
"fstp dword [ecx+0x30]",
|
|
"mov edx, dword [ebp+0x8]",
|
|
"fld dword [ebp-0xc]",
|
|
"fstp dword [edx+0x34]",
|
|
"mov eax, dword [ebp+0x8]",
|
|
"fld dword [ebp-0x8]",
|
|
"fstp dword [eax+0x38]",
|
|
"mov ecx, dword [ebp+0x8]",
|
|
"fld dword [ebp-0x4]",
|
|
"fstp dword [ecx+0x3c]",
|
|
"mov eax, dword [ebp+0x8]",
|
|
"mov esp, ebp",
|
|
"pop ebp"
|
|
],
|
|
"ExpectedArm64ASM": [
|
|
"str w9, [x8, #-4]!",
|
|
"mov x9, x8",
|
|
"subs w26, w8, #0x44 (68)",
|
|
"mov x27, x8",
|
|
"mov x8, x26",
|
|
"stur w7, [x9, #-68]",
|
|
"ldur w4, [x9, #-68]",
|
|
"ldr s2, [x4]",
|
|
"stur s2, [x9, #-64]",
|
|
"ldur w7, [x9, #-68]",
|
|
"ldr s2, [x7, #16]",
|
|
"stur s2, [x9, #-60]",
|
|
"ldur w5, [x9, #-68]",
|
|
"ldr s2, [x5, #32]",
|
|
"stur s2, [x9, #-56]",
|
|
"ldur w4, [x9, #-68]",
|
|
"ldr s2, [x4, #48]",
|
|
"stur s2, [x9, #-52]",
|
|
"ldur w7, [x9, #-68]",
|
|
"ldr s2, [x7, #4]",
|
|
"stur s2, [x9, #-48]",
|
|
"ldur w5, [x9, #-68]",
|
|
"ldr s2, [x5, #20]",
|
|
"stur s2, [x9, #-44]",
|
|
"ldur w4, [x9, #-68]",
|
|
"ldr s2, [x4, #36]",
|
|
"stur s2, [x9, #-40]",
|
|
"ldur w7, [x9, #-68]",
|
|
"ldr s2, [x7, #52]",
|
|
"stur s2, [x9, #-36]",
|
|
"ldur w5, [x9, #-68]",
|
|
"ldr s2, [x5, #8]",
|
|
"stur s2, [x9, #-32]",
|
|
"ldur w4, [x9, #-68]",
|
|
"ldr s2, [x4, #24]",
|
|
"stur s2, [x9, #-28]",
|
|
"ldur w7, [x9, #-68]",
|
|
"ldr s2, [x7, #40]",
|
|
"stur s2, [x9, #-24]",
|
|
"ldur w5, [x9, #-68]",
|
|
"ldr s2, [x5, #56]",
|
|
"stur s2, [x9, #-20]",
|
|
"ldur w4, [x9, #-68]",
|
|
"ldr s2, [x4, #12]",
|
|
"stur s2, [x9, #-16]",
|
|
"ldur w7, [x9, #-68]",
|
|
"ldr s2, [x7, #28]",
|
|
"stur s2, [x9, #-12]",
|
|
"ldur w5, [x9, #-68]",
|
|
"ldr s2, [x5, #44]",
|
|
"stur s2, [x9, #-8]",
|
|
"ldur w4, [x9, #-68]",
|
|
"ldr s2, [x4, #60]",
|
|
"stur s2, [x9, #-4]",
|
|
"ldr w7, [x9, #8]",
|
|
"ldur s2, [x9, #-64]",
|
|
"str s2, [x7]",
|
|
"ldr w5, [x9, #8]",
|
|
"ldur s2, [x9, #-60]",
|
|
"str s2, [x5, #4]",
|
|
"ldr w4, [x9, #8]",
|
|
"ldur s2, [x9, #-56]",
|
|
"str s2, [x4, #8]",
|
|
"ldr w7, [x9, #8]",
|
|
"ldur s2, [x9, #-52]",
|
|
"str s2, [x7, #12]",
|
|
"ldr w5, [x9, #8]",
|
|
"ldur s2, [x9, #-48]",
|
|
"str s2, [x5, #16]",
|
|
"ldr w4, [x9, #8]",
|
|
"ldur s2, [x9, #-44]",
|
|
"str s2, [x4, #20]",
|
|
"ldr w7, [x9, #8]",
|
|
"ldur s2, [x9, #-40]",
|
|
"str s2, [x7, #24]",
|
|
"ldr w5, [x9, #8]",
|
|
"ldur s2, [x9, #-36]",
|
|
"str s2, [x5, #28]",
|
|
"ldr w4, [x9, #8]",
|
|
"ldur s2, [x9, #-32]",
|
|
"str s2, [x4, #32]",
|
|
"ldr w7, [x9, #8]",
|
|
"ldur s2, [x9, #-28]",
|
|
"str s2, [x7, #36]",
|
|
"ldr w5, [x9, #8]",
|
|
"ldur s2, [x9, #-24]",
|
|
"str s2, [x5, #40]",
|
|
"ldr w4, [x9, #8]",
|
|
"ldur s2, [x9, #-20]",
|
|
"str s2, [x4, #44]",
|
|
"ldr w7, [x9, #8]",
|
|
"ldur s2, [x9, #-16]",
|
|
"str s2, [x7, #48]",
|
|
"ldr w5, [x9, #8]",
|
|
"ldur s2, [x9, #-12]",
|
|
"str s2, [x5, #52]",
|
|
"ldr w4, [x9, #8]",
|
|
"ldur s2, [x9, #-8]",
|
|
"str s2, [x4, #56]",
|
|
"ldr w7, [x9, #8]",
|
|
"ldur s2, [x9, #-4]",
|
|
"str s2, [x7, #60]",
|
|
"ldr w4, [x9, #8]",
|
|
"mov x8, x9",
|
|
"ldr w9, [x8], #4",
|
|
"ldrb w20, [x28, #1051]",
|
|
"ldrb w21, [x28, #1202]",
|
|
"mov w22, #0x1",
|
|
"add w20, w20, #0x7 (7)",
|
|
"and w20, w20, #0x7",
|
|
"lsl w20, w22, w20",
|
|
"bic w20, w21, w20",
|
|
"strb w20, [x28, #1202]"
|
|
]
|
|
}
|
|
}
|
|
}
|