Files
FEX-Emu--FEX/unittests/InstructionCountCI/FlagM/HotBlocks_32Bit.json
T
2026-09-04 11:53:13 +02:00

367 lines
11 KiB
JSON

{
"Features": {
"Bitness": 32,
"EnabledHostFeatures": [
"FLAGM",
"FLAGM2"
],
"DisabledHostFeatures": [
"SVE128",
"SVE256",
"AFP"
],
"BinaryCacheVersion": 14
},
"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]"
]
}
}
}