diff --git a/unittests/InstructionCountCI/FEXOpt/MultiInst.json b/unittests/InstructionCountCI/FEXOpt/MultiInst.json index 9610c2947..4696cad39 100644 --- a/unittests/InstructionCountCI/FEXOpt/MultiInst.json +++ b/unittests/InstructionCountCI/FEXOpt/MultiInst.json @@ -34,7 +34,7 @@ }, "push rax, rbx": { "x86InstructionCount": 2, - "ExpectedInstructionCount": 2, + "ExpectedInstructionCount": 1, "Comment": [ "Mergable 64-bit pushes" ], @@ -43,8 +43,7 @@ "push rbx" ], "ExpectedArm64ASM": [ - "str x4, [x8, #-8]!", - "str x6, [x8, #-8]!" + "stp x6, x4, [x8, #-16]!" ] }, "adds xmm0, xmm1, xmm2": { @@ -1056,7 +1055,7 @@ }, "Sekiro spill block": { "x86InstructionCount": 119, - "ExpectedInstructionCount": 126, + "ExpectedInstructionCount": 118, "Comment": [ "This block of code came from the settings screen when it loaded", "It was originally at RIP: 0x14232cca0 and has been deobfuscated" @@ -1184,14 +1183,10 @@ ], "ExpectedArm64ASM": [ "str x7, [x8, #8]", - "str x6, [x8, #-8]!", - "str x9, [x8, #-8]!", - "str x10, [x8, #-8]!", - "str x11, [x8, #-8]!", - "str x16, [x8, #-8]!", - "str x17, [x8, #-8]!", - "str x19, [x8, #-8]!", - "str x29, [x8, #-8]!", + "stp x9, x6, [x8, #-16]!", + "stp x11, x10, [x8, #-16]!", + "stp x17, x16, [x8, #-16]!", + "stp x29, x19, [x8, #-16]!", "sub x8, x8, #0x18 (24)", "ldr w7, [x5, #36]", "ldr w10, [x5]", @@ -1300,14 +1295,10 @@ "mvn w27, w8", "adds x26, x8, #0x18 (24)", "mov x8, x26", - "ldr x29, [x8], #8", - "ldr x19, [x8], #8", - "ldr x17, [x8], #8", - "ldr x16, [x8], #8", - "ldr x11, [x8], #8", - "ldr x10, [x8], #8", - "ldr x9, [x8], #8", - "ldr x6, [x8], #8", + "ldp x29, x19, [x8], #16", + "ldp x17, x16, [x8], #16", + "ldp x11, x10, [x8], #16", + "ldp x9, x6, [x8], #16", "cfinv" ] }, diff --git a/unittests/InstructionCountCI/FlagM/HotBlocks.json b/unittests/InstructionCountCI/FlagM/HotBlocks.json index e57ceb3f2..e11d0ec42 100644 --- a/unittests/InstructionCountCI/FlagM/HotBlocks.json +++ b/unittests/InstructionCountCI/FlagM/HotBlocks.json @@ -253,7 +253,7 @@ }, "bytemark DivideInternalFPF": { "x86InstructionCount": 13, - "ExpectedInstructionCount": 15, + "ExpectedInstructionCount": 12, "Comment": [ "Saw this in bytemark" ], @@ -273,12 +273,9 @@ "cmp eax,0x18" ], "ExpectedArm64ASM": [ - "str x9, [x8, #-8]!", - "str x29, [x8, #-8]!", - "str x19, [x8, #-8]!", - "str x17, [x8, #-8]!", - "str x16, [x8, #-8]!", - "str x6, [x8, #-8]!", + "stp x29, x9, [x8, #-16]!", + "stp x17, x19, [x8, #-16]!", + "stp x6, x16, [x8, #-16]!", "sub x8, x8, #0x18 (24)", "str x5, [x8]", "ldrb w14, [x11]", diff --git a/unittests/InstructionCountCI/FlagM/HotBlocks_TSO_32Bit.json b/unittests/InstructionCountCI/FlagM/HotBlocks_TSO_32Bit.json index 6bbfd644e..307647d5e 100644 --- a/unittests/InstructionCountCI/FlagM/HotBlocks_TSO_32Bit.json +++ b/unittests/InstructionCountCI/FlagM/HotBlocks_TSO_32Bit.json @@ -17,7 +17,7 @@ "Instructions": { "The Sims 1 hot block": { "x86InstructionCount": 47, - "ExpectedInstructionCount": 98, + "ExpectedInstructionCount": 97, "Comment": [ "Hottest in-game block from The Sims 1, Legacy Collection", "Consumed 6.13% of a CPU core on Oryon-1", @@ -92,8 +92,7 @@ "stlur w4, [x9, #-4]", "ldapur w5, [x9, #8]", "nop", - "str w6, [x8, #-4]!", - "str w10, [x8, #-4]!", + "stp w10, w6, [x8, #-8]!", "ldapur w10, [x9, #24]", "nop", "str w11, [x8, #-4]!", diff --git a/unittests/InstructionCountCI/FlagM/Primary_32Bit.json b/unittests/InstructionCountCI/FlagM/Primary_32Bit.json index e4bac5ca6..8813249ea 100644 --- a/unittests/InstructionCountCI/FlagM/Primary_32Bit.json +++ b/unittests/InstructionCountCI/FlagM/Primary_32Bit.json @@ -247,67 +247,51 @@ ] }, "pusha": { - "ExpectedInstructionCount": 10, + "ExpectedInstructionCount": 5, "Comment": "0x60", "ExpectedArm64ASM": [ - "mov w20, w8", - "str w4, [x20, #-4]!", - "str w7, [x20, #-4]!", - "str w5, [x20, #-4]!", - "str w6, [x20, #-4]!", - "str w8, [x20, #-4]!", - "str w9, [x20, #-4]!", - "str w10, [x20, #-4]!", - "mov w8, w20", - "str w11, [x8, #-4]!" + "mov x20, x8", + "stp w7, w4, [x8, #-8]!", + "stp w6, w5, [x8, #-8]!", + "stp w9, w20, [x8, #-8]!", + "stp w11, w10, [x8, #-8]!" ] }, "pushad": { - "ExpectedInstructionCount": 10, + "ExpectedInstructionCount": 5, "Comment": "0x60", "ExpectedArm64ASM": [ - "mov w20, w8", - "str w4, [x20, #-4]!", - "str w7, [x20, #-4]!", - "str w5, [x20, #-4]!", - "str w6, [x20, #-4]!", - "str w8, [x20, #-4]!", - "str w9, [x20, #-4]!", - "str w10, [x20, #-4]!", - "mov w8, w20", - "str w11, [x8, #-4]!" + "mov x20, x8", + "stp w7, w4, [x8, #-8]!", + "stp w6, w5, [x8, #-8]!", + "stp w9, w20, [x8, #-8]!", + "stp w11, w10, [x8, #-8]!" ] }, "popa": { - "ExpectedInstructionCount": 10, + "ExpectedInstructionCount": 7, "Comment": "0x61", "ExpectedArm64ASM": [ "mov x20, x8", - "ldr w11, [x20], #4", - "ldr w10, [x20], #4", + "ldp w11, w10, [x20], #8", "ldr w9, [x20], #4", "add x20, x20, #0x4 (4)", "mov x8, x20", - "ldr w6, [x8], #4", - "ldr w5, [x8], #4", - "ldr w7, [x8], #4", - "ldr w4, [x8], #4" + "ldp w6, w5, [x8], #8", + "ldp w7, w4, [x8], #8" ] }, "popad": { - "ExpectedInstructionCount": 10, + "ExpectedInstructionCount": 7, "Comment": "0x61", "ExpectedArm64ASM": [ "mov x20, x8", - "ldr w11, [x20], #4", - "ldr w10, [x20], #4", + "ldp w11, w10, [x20], #8", "ldr w9, [x20], #4", "add x20, x20, #0x4 (4)", "mov x8, x20", - "ldr w6, [x8], #4", - "ldr w5, [x8], #4", - "ldr w7, [x8], #4", - "ldr w4, [x8], #4" + "ldp w6, w5, [x8], #8", + "ldp w7, w4, [x8], #8" ] }, "o16 pushf": { diff --git a/unittests/InstructionCountCI/FlagM/x87-Crysis2Max-fmodel.json b/unittests/InstructionCountCI/FlagM/x87-Crysis2Max-fmodel.json index 8c75d53d1..92c838b55 100644 --- a/unittests/InstructionCountCI/FlagM/x87-Crysis2Max-fmodel.json +++ b/unittests/InstructionCountCI/FlagM/x87-Crysis2Max-fmodel.json @@ -8585,8 +8585,7 @@ "fmov s2, s0", "str s2, [x7, #960]", "mov x8, x9", - "ldr w9, [x8], #4", - "ldr w20, [x8], #4", + "ldp w9, w20, [x8], #8", "ldrb w21, [x28, #1019]", "add w21, w21, #0x3 (3)", "and w21, w21, #0x7", @@ -8597,7 +8596,7 @@ "strb w21, [x28, #1298]" ], "x86InstructionCount": 809, - "ExpectedInstructionCount": 7770 + "ExpectedInstructionCount": 7769 } } } diff --git a/unittests/InstructionCountCI/FlagM/x87-HalfLife.json b/unittests/InstructionCountCI/FlagM/x87-HalfLife.json index 99139a050..4032800ca 100644 --- a/unittests/InstructionCountCI/FlagM/x87-HalfLife.json +++ b/unittests/InstructionCountCI/FlagM/x87-HalfLife.json @@ -1063,7 +1063,7 @@ }, "Block4": { "x86InstructionCount": 54, - "ExpectedInstructionCount": 80, + "ExpectedInstructionCount": 78, "x86Insts": [ "push ebp", "push edi", @@ -1121,10 +1121,8 @@ "fld dword [esp + 0x2c]" ], "ExpectedArm64ASM": [ - "str w9, [x8, #-4]!", - "str w11, [x8, #-4]!", - "str w10, [x8, #-4]!", - "str w6, [x8, #-4]!", + "stp w11, w9, [x8, #-8]!", + "stp w6, w10, [x8, #-8]!", "subs w26, w8, #0x4c (76)", "mov x27, x8", "mov x8, x26", @@ -1564,7 +1562,7 @@ }, "Block6": { "x86InstructionCount": 39, - "ExpectedInstructionCount": 297, + "ExpectedInstructionCount": 295, "x86Insts": [ "push ebp", "push edi", @@ -1607,10 +1605,8 @@ "fstp st1" ], "ExpectedArm64ASM": [ - "str w9, [x8, #-4]!", - "str w11, [x8, #-4]!", - "str w10, [x8, #-4]!", - "str w6, [x8, #-4]!", + "stp w11, w9, [x8, #-8]!", + "stp w6, w10, [x8, #-8]!", "subs w20, w8, #0x4 (4)", "mov x27, x8", "mov x8, x20", @@ -2611,7 +2607,7 @@ }, "Block10": { "x86InstructionCount": 125, - "ExpectedInstructionCount": 22, + "ExpectedInstructionCount": 21, "x86Insts": [ "push esi", "push ebx", @@ -2740,8 +2736,7 @@ "xor eax,dword gs:[0x14]" ], "ExpectedArm64ASM": [ - "str w10, [x8, #-4]!", - "str w6, [x8, #-4]!", + "stp w6, w10, [x8, #-8]!", "sub w8, w8, #0xa4 (164)", "ldr w6, [x8, #176]", "add w10, w8, #0x18 (24)", diff --git a/unittests/InstructionCountCI/FlagM/x87-Oblivion.json b/unittests/InstructionCountCI/FlagM/x87-Oblivion.json index 06ad7eb8d..caef346be 100644 --- a/unittests/InstructionCountCI/FlagM/x87-Oblivion.json +++ b/unittests/InstructionCountCI/FlagM/x87-Oblivion.json @@ -17705,7 +17705,7 @@ }, "Block4": { "x86InstructionCount": 2050, - "ExpectedInstructionCount": 40, + "ExpectedInstructionCount": 39, "x86Insts": [ "fldz", "push 0x0", @@ -19768,8 +19768,7 @@ "movk w21, #0x100, lsl #16", "str w21, [x8, #-4]!", "mov w21, #0x37", - "str w21, [x8, #-4]!", - "str w7, [x8, #-4]!", + "stp w7, w21, [x8, #-8]!", "str x30, [sp, #-16]!", "mov v0.16b, v2.16b", "ldr x0, [x28, #1456]", diff --git a/unittests/InstructionCountCI/FlagM/x87-Psychonauts.json b/unittests/InstructionCountCI/FlagM/x87-Psychonauts.json index 15ccf61e7..3975e25d1 100644 --- a/unittests/InstructionCountCI/FlagM/x87-Psychonauts.json +++ b/unittests/InstructionCountCI/FlagM/x87-Psychonauts.json @@ -26756,7 +26756,7 @@ }, "Block8": { "x86InstructionCount": 231, - "ExpectedInstructionCount": 3724, + "ExpectedInstructionCount": 3723, "x86Insts": [ "fadd dword [esp + 0x40]", "lea edx,[ecx + ecx*0x2]", @@ -30693,8 +30693,7 @@ "add w20, w20, #0x1 (1)", "and w20, w20, #0x7", "strb w20, [x28, #1019]", - "ldr w11, [x8], #4", - "ldr w10, [x8], #4", + "ldp w11, w10, [x8], #8", "ldrb w22, [x28, #1298]", "lsl w23, w21, w20", "bic w22, w22, w23", @@ -30719,7 +30718,7 @@ }, "Block9": { "x86InstructionCount": 222, - "ExpectedInstructionCount": 3646, + "ExpectedInstructionCount": 3645, "x86Insts": [ "fadd dword [esp + 0x40]", "lea edx,[ecx + ecx*0x2]", @@ -34569,8 +34568,7 @@ "add w20, w20, #0x1 (1)", "and w20, w20, #0x7", "strb w20, [x28, #1019]", - "ldr w11, [x8], #4", - "ldr w10, [x8], #4", + "ldp w11, w10, [x8], #8", "ldrb w22, [x28, #1298]", "lsl w23, w21, w20", "bic w22, w22, w23", diff --git a/unittests/InstructionCountCI/Primary_32Bit.json b/unittests/InstructionCountCI/Primary_32Bit.json index 2c27708d4..fa0b4a854 100644 --- a/unittests/InstructionCountCI/Primary_32Bit.json +++ b/unittests/InstructionCountCI/Primary_32Bit.json @@ -262,67 +262,51 @@ ] }, "pusha": { - "ExpectedInstructionCount": 10, + "ExpectedInstructionCount": 5, "Comment": "0x60", "ExpectedArm64ASM": [ - "mov w20, w8", - "str w4, [x20, #-4]!", - "str w7, [x20, #-4]!", - "str w5, [x20, #-4]!", - "str w6, [x20, #-4]!", - "str w8, [x20, #-4]!", - "str w9, [x20, #-4]!", - "str w10, [x20, #-4]!", - "mov w8, w20", - "str w11, [x8, #-4]!" + "mov x20, x8", + "stp w7, w4, [x8, #-8]!", + "stp w6, w5, [x8, #-8]!", + "stp w9, w20, [x8, #-8]!", + "stp w11, w10, [x8, #-8]!" ] }, "pushad": { - "ExpectedInstructionCount": 10, + "ExpectedInstructionCount": 5, "Comment": "0x60", "ExpectedArm64ASM": [ - "mov w20, w8", - "str w4, [x20, #-4]!", - "str w7, [x20, #-4]!", - "str w5, [x20, #-4]!", - "str w6, [x20, #-4]!", - "str w8, [x20, #-4]!", - "str w9, [x20, #-4]!", - "str w10, [x20, #-4]!", - "mov w8, w20", - "str w11, [x8, #-4]!" + "mov x20, x8", + "stp w7, w4, [x8, #-8]!", + "stp w6, w5, [x8, #-8]!", + "stp w9, w20, [x8, #-8]!", + "stp w11, w10, [x8, #-8]!" ] }, "popa": { - "ExpectedInstructionCount": 10, + "ExpectedInstructionCount": 7, "Comment": "0x61", "ExpectedArm64ASM": [ "mov x20, x8", - "ldr w11, [x20], #4", - "ldr w10, [x20], #4", + "ldp w11, w10, [x20], #8", "ldr w9, [x20], #4", "add x20, x20, #0x4 (4)", "mov x8, x20", - "ldr w6, [x8], #4", - "ldr w5, [x8], #4", - "ldr w7, [x8], #4", - "ldr w4, [x8], #4" + "ldp w6, w5, [x8], #8", + "ldp w7, w4, [x8], #8" ] }, "popad": { - "ExpectedInstructionCount": 10, + "ExpectedInstructionCount": 7, "Comment": "0x61", "ExpectedArm64ASM": [ "mov x20, x8", - "ldr w11, [x20], #4", - "ldr w10, [x20], #4", + "ldp w11, w10, [x20], #8", "ldr w9, [x20], #4", "add x20, x20, #0x4 (4)", "mov x8, x20", - "ldr w6, [x8], #4", - "ldr w5, [x8], #4", - "ldr w7, [x8], #4", - "ldr w4, [x8], #4" + "ldp w6, w5, [x8], #8", + "ldp w7, w4, [x8], #8" ] }, "aam": {