diff --git a/External/FEXCore/Source/Interface/Core/JIT/x86_64/JIT.cpp b/External/FEXCore/Source/Interface/Core/JIT/x86_64/JIT.cpp index 9c2f33217..f90b82a0d 100644 --- a/External/FEXCore/Source/Interface/Core/JIT/x86_64/JIT.cpp +++ b/External/FEXCore/Source/Interface/Core/JIT/x86_64/JIT.cpp @@ -3548,7 +3548,18 @@ void *JITCore::CompileCode([[maybe_unused]] FEXCore::IR::IRListView const } case IR::OP_FINDTRAILINGZEROS: { auto Op = IROp->C(); - tzcnt(GetDst(Node), GetSrc(Op->Header.Args[0].ID())); + switch (OpSize) { + case 2: + tzcnt(GetDst(Node), GetSrc(Op->Header.Args[0].ID())); + break; + case 4: + tzcnt(GetDst(Node), GetSrc(Op->Header.Args[0].ID())); + break; + case 8: + tzcnt(GetDst(Node), GetSrc(Op->Header.Args[0].ID())); + break; + default: LogMan::Msg::A("Unknown size: %d", OpSize); break; + } break; } case IR::OP_DUMMY: diff --git a/unittests/ASM/REP/F3_BC.asm b/unittests/ASM/REP/F3_BC.asm index 5e6c1f4a8..4b50f830f 100644 --- a/unittests/ASM/REP/F3_BC.asm +++ b/unittests/ASM/REP/F3_BC.asm @@ -7,7 +7,9 @@ "RDX": "0x40", "RSI": "0x0", "R14": "0x0", - "R13": "0x0" + "R13": "0x0", + "R12": "0x20", + "R11": "0x10" }, "MemoryRegions": { "0x100000000": "4096" @@ -32,7 +34,11 @@ tzcnt ebx, dword [rdx + 8 * 1] tzcnt rcx, qword [rdx + 8 * 2] mov r15, 0 +mov r12, 0 +mov r11, 0 tzcnt rdx, r15 +tzcnt r12d, r15d +tzcnt r11w, r15w mov r15, 0xFFFFFFFFFFFFFFFF tzcnt esi, r15d