Browse Source

Remove remaining uses of reg8 and reg16

Fabian 3 years ago
parent
commit
42ecf896bb

+ 4 - 4
src/rust/cpu2/arith.rs

@@ -262,14 +262,14 @@ pub unsafe fn imul_reg32(operand1: i32, operand2: i32) -> i32 {
 
 #[no_mangle]
 pub unsafe fn xadd8(source_operand: i32, reg: i32) -> i32 {
-    let tmp = *reg8.offset(reg as isize) as i32;
-    *reg8.offset(reg as isize) = source_operand as u8;
+    let tmp = read_reg8(reg);
+    write_reg8(reg, source_operand);
     return add(source_operand, tmp, OPSIZE_8);
 }
 #[no_mangle]
 pub unsafe fn xadd16(source_operand: i32, reg: i32) -> i32 {
-    let tmp = *reg16.offset(reg as isize) as i32;
-    *reg16.offset(reg as isize) = source_operand as u16;
+    let tmp = read_reg16(reg);
+    write_reg16(reg, source_operand);
     return add(source_operand, tmp, OPSIZE_16);
 }
 #[no_mangle]

+ 2 - 2
src/rust/cpu2/cpu.rs

@@ -3090,7 +3090,7 @@ pub unsafe fn safe_write128(addr: i32, value: reg128) -> OrPageFault<()> {
     Ok(())
 }
 
-pub fn get_reg8_index(index: i32) -> i32 { return index << 2 & 12 | index >> 2 & 1; }
+fn get_reg8_index(index: i32) -> i32 { return index << 2 & 12 | index >> 2 & 1; }
 
 pub unsafe fn read_reg8(index: i32) -> i32 {
     dbg_assert!(index >= 0 && index < 8);
@@ -3102,7 +3102,7 @@ pub unsafe fn write_reg8(index: i32, value: i32) {
     *reg8.offset(get_reg8_index(index) as isize) = value as u8;
 }
 
-pub fn get_reg16_index(index: i32) -> i32 { return index << 1; }
+fn get_reg16_index(index: i32) -> i32 { return index << 1; }
 
 pub unsafe fn read_reg16(index: i32) -> i32 {
     dbg_assert!(index >= 0 && index < 8);

+ 4 - 8
src/rust/cpu2/instructions.rs

@@ -851,17 +851,13 @@ pub unsafe fn instr32_85_mem(addr: i32, r: i32) {
 }
 pub unsafe fn instr32_85_reg(r1: i32, r: i32) { test32(read_reg32(r1), read_reg32(r)); }
 pub unsafe fn instr_86_mem(addr: i32, r: i32) {
-    SAFE_READ_WRITE8!(___, addr, xchg8(___, get_reg8_index(r)));
-}
-pub unsafe fn instr_86_reg(r1: i32, r: i32) {
-    write_reg8(r1, xchg8(read_reg8(r1), get_reg8_index(r)));
+    SAFE_READ_WRITE8!(___, addr, xchg8(___, r));
 }
+pub unsafe fn instr_86_reg(r1: i32, r: i32) { write_reg8(r1, xchg8(read_reg8(r1), r)); }
 pub unsafe fn instr16_87_mem(addr: i32, r: i32) {
-    SAFE_READ_WRITE16!(___, addr, xchg16(___, get_reg16_index(r)));
-}
-pub unsafe fn instr16_87_reg(r1: i32, r: i32) {
-    write_reg16(r1, xchg16(read_reg16(r1), get_reg16_index(r)));
+    SAFE_READ_WRITE16!(___, addr, xchg16(___, r));
 }
+pub unsafe fn instr16_87_reg(r1: i32, r: i32) { write_reg16(r1, xchg16(read_reg16(r1), r)); }
 pub unsafe fn instr32_87_mem(addr: i32, r: i32) {
     SAFE_READ_WRITE32!(___, addr, xchg32(___, r));
 }

+ 4 - 8
src/rust/cpu2/instructions_0f.rs

@@ -3164,20 +3164,16 @@ pub unsafe fn instr32_0FBF_mem(addr: i32, r: i32) {
 pub unsafe fn instr32_0FBF_reg(r1: i32, r: i32) { write_reg32(r, read_reg16(r1) << 16 >> 16); }
 #[no_mangle]
 pub unsafe fn instr_0FC0_mem(addr: i32, r: i32) {
-    SAFE_READ_WRITE8!(___, addr, xadd8(___, get_reg8_index(r)));
+    SAFE_READ_WRITE8!(___, addr, xadd8(___, r));
 }
 #[no_mangle]
-pub unsafe fn instr_0FC0_reg(r1: i32, r: i32) {
-    write_reg8(r1, xadd8(read_reg8(r1), get_reg8_index(r)));
-}
+pub unsafe fn instr_0FC0_reg(r1: i32, r: i32) { write_reg8(r1, xadd8(read_reg8(r1), r)); }
 #[no_mangle]
 pub unsafe fn instr16_0FC1_mem(addr: i32, r: i32) {
-    SAFE_READ_WRITE16!(___, addr, xadd16(___, get_reg16_index(r)));
+    SAFE_READ_WRITE16!(___, addr, xadd16(___, r));
 }
 #[no_mangle]
-pub unsafe fn instr16_0FC1_reg(r1: i32, r: i32) {
-    write_reg16(r1, xadd16(read_reg16(r1), get_reg16_index(r)));
-}
+pub unsafe fn instr16_0FC1_reg(r1: i32, r: i32) { write_reg16(r1, xadd16(read_reg16(r1), r)); }
 #[no_mangle]
 pub unsafe fn instr32_0FC1_mem(addr: i32, r: i32) {
     SAFE_READ_WRITE32!(___, addr, xadd32(___, r));

+ 4 - 4
src/rust/cpu2/misc_instr.rs

@@ -449,14 +449,14 @@ pub unsafe fn fxrstor(addr: i32) {
 
 #[no_mangle]
 pub unsafe fn xchg8(data: i32, r8: i32) -> i32 {
-    let tmp = *reg8.offset(r8 as isize) as i32;
-    *reg8.offset(r8 as isize) = data as u8;
+    let tmp = read_reg8(r8);
+    write_reg8(r8, data);
     return tmp;
 }
 #[no_mangle]
 pub unsafe fn xchg16(data: i32, r16: i32) -> i32 {
-    let tmp = *reg16.offset(r16 as isize) as i32;
-    *reg16.offset(r16 as isize) = data as u16;
+    let tmp = read_reg16(r16);
+    write_reg16(r16, data);
     return tmp;
 }
 #[no_mangle]

+ 2 - 4
src/rust/jit_instructions.rs

@@ -4129,8 +4129,7 @@ pub fn instr16_0FC1_mem_jit(ctx: &mut JitContext, modrm_byte: u8, r: u32) {
     codegen::gen_modrm_resolve(ctx, modrm_byte);
     let address_local = ctx.builder.set_new_local();
     codegen::gen_safe_read_write(ctx, BitSize::WORD, &address_local, &|ref mut ctx| {
-        ctx.builder
-            .const_i32(::cpu2::cpu::get_reg16_index(r as i32));
+        ctx.builder.const_i32(r as i32);
         codegen::gen_move_registers_from_locals_to_memory(ctx);
         ctx.builder.call_fn2_ret("xadd16");
         codegen::gen_move_registers_from_memory_to_locals(ctx);
@@ -4139,8 +4138,7 @@ pub fn instr16_0FC1_mem_jit(ctx: &mut JitContext, modrm_byte: u8, r: u32) {
 }
 pub fn instr16_0FC1_reg_jit(ctx: &mut JitContext, r1: u32, r2: u32) {
     codegen::gen_get_reg16(ctx, r1);
-    ctx.builder
-        .const_i32(::cpu2::cpu::get_reg16_index(r2 as i32));
+    ctx.builder.const_i32(r2 as i32);
     codegen::gen_move_registers_from_locals_to_memory(ctx);
     ctx.builder.call_fn2_ret("xadd16");
     codegen::gen_move_registers_from_memory_to_locals(ctx);