From 04695957e2b52e58a534bc0f823672be8ecca509 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sun, 12 Jul 2020 15:33:29 +0200 Subject: [PATCH] UserspaceEmulator: Implement the MOVSX instruction --- DevTools/UserspaceEmulator/SoftCPU.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/DevTools/UserspaceEmulator/SoftCPU.cpp b/DevTools/UserspaceEmulator/SoftCPU.cpp index 44581cc517..57f4677bd9 100644 --- a/DevTools/UserspaceEmulator/SoftCPU.cpp +++ b/DevTools/UserspaceEmulator/SoftCPU.cpp @@ -1055,9 +1055,20 @@ void SoftCPU::MOVSW(const X86::Instruction& insn) }); } } -void SoftCPU::MOVSX_reg16_RM8(const X86::Instruction&) { TODO(); } -void SoftCPU::MOVSX_reg32_RM16(const X86::Instruction&) { TODO(); } -void SoftCPU::MOVSX_reg32_RM8(const X86::Instruction&) { TODO(); } +void SoftCPU::MOVSX_reg16_RM8(const X86::Instruction& insn) +{ + gpr16(insn.reg16()) = sign_extended_to(insn.modrm().read8(*this, insn)); +} + +void SoftCPU::MOVSX_reg32_RM16(const X86::Instruction& insn) +{ + gpr32(insn.reg32()) = sign_extended_to(insn.modrm().read16(*this, insn)); +} + +void SoftCPU::MOVSX_reg32_RM8(const X86::Instruction& insn) +{ + gpr32(insn.reg32()) = sign_extended_to(insn.modrm().read8(*this, insn)); +} void SoftCPU::MOVZX_reg16_RM8(const X86::Instruction& insn) {