diff --git a/src/rust/cpu/instructions.rs b/src/rust/cpu/instructions.rs index 57b5f937..24b6667f 100644 --- a/src/rust/cpu/instructions.rs +++ b/src/rust/cpu/instructions.rs @@ -919,23 +919,28 @@ pub unsafe fn instr32_8D_mem(modrm_byte: i32, r: i32) { *prefixes = 0; } -unsafe fn instr_8E_helper(data: i32, r: i32) { +#[no_mangle] +pub unsafe fn instr_8E_mem(addr: i32, r: i32) { if r == ES || r == SS || r == DS || r == FS || r == GS { - if !switch_seg(r, data) { + if !switch_seg(r, return_on_pagefault!(safe_read16(addr))) { return; } } else { dbg_log!("mov sreg #ud"); trigger_ud(); - }; + } } #[no_mangle] -pub unsafe fn instr_8E_mem(addr: i32, r: i32) { - instr_8E_helper(return_on_pagefault!(safe_read16(addr)), r); +pub unsafe fn instr_8E_reg(r1: i32, r: i32) { + if r == ES || r == SS || r == DS || r == FS || r == GS { + switch_seg(r, read_reg16(r1)); + } + else { + dbg_log!("mov sreg #ud"); + trigger_ud(); + } } -#[no_mangle] -pub unsafe fn instr_8E_reg(r1: i32, r: i32) { instr_8E_helper(read_reg16(r1), r); } pub unsafe fn instr16_8F_0_mem(modrm_byte: i32) { // pop