diff --git a/gen/x86_table.js b/gen/x86_table.js index 9b20e5cc..d9745136 100644 --- a/gen/x86_table.js +++ b/gen/x86_table.js @@ -647,8 +647,8 @@ const encodings = [ { sse: 1, opcode: 0x660F28, e: 1, custom: 1 }, { sse: 1, opcode: 0x0F29, e: 1, custom: 1 }, { sse: 1, opcode: 0x660F29, e: 1, custom: 1 }, - { sse: 1, opcode: 0x0F2A, e: 1, }, - { sse: 1, opcode: 0x660F2A, e: 1, }, + { sse: 1, opcode: 0x0F2A, e: 1, custom: 1 }, + { sse: 1, opcode: 0x660F2A, e: 1, custom: 1 }, { sse: 1, opcode: 0xF20F2A, e: 1, }, { sse: 1, opcode: 0xF30F2A, e: 1, }, { sse: 1, opcode: 0x0F2B, reg_ud: 1, e: 1, custom: 1 }, diff --git a/src/rust/cpu/instructions_0f.rs b/src/rust/cpu/instructions_0f.rs index ee595ccc..e07a89f6 100644 --- a/src/rust/cpu/instructions_0f.rs +++ b/src/rust/cpu/instructions_0f.rs @@ -900,6 +900,7 @@ pub unsafe fn instr_660F29_reg(r1: i32, r2: i32) { mov_r_r128(r1, r2); } +#[no_mangle] pub unsafe fn instr_0F2A(source: u64, r: i32) { // cvtpi2ps xmm, mm/m64 // Note: Casts here can fail @@ -909,12 +910,11 @@ pub unsafe fn instr_0F2A(source: u64, r: i32) { write_xmm64(r, std::mem::transmute(result)); transition_fpu_to_mmx(); } -#[no_mangle] pub unsafe fn instr_0F2A_reg(r1: i32, r2: i32) { instr_0F2A(read_mmx64s(r1), r2); } -#[no_mangle] pub unsafe fn instr_0F2A_mem(addr: i32, r: i32) { instr_0F2A(return_on_pagefault!(safe_read64s(addr)), r); } +#[no_mangle] pub unsafe fn instr_660F2A(source: u64, r: i32) { // cvtpi2pd xmm, xmm/m64 // These casts can't fail @@ -925,9 +925,7 @@ pub unsafe fn instr_660F2A(source: u64, r: i32) { write_xmm_reg128(r, result); transition_fpu_to_mmx(); } -#[no_mangle] pub unsafe fn instr_660F2A_reg(r1: i32, r2: i32) { instr_660F2A(read_mmx64s(r1), r2); } -#[no_mangle] pub unsafe fn instr_660F2A_mem(addr: i32, r: i32) { instr_660F2A(return_on_pagefault!(safe_read64s(addr)), r); } diff --git a/src/rust/jit_instructions.rs b/src/rust/jit_instructions.rs index 8a46de5f..319130b8 100644 --- a/src/rust/jit_instructions.rs +++ b/src/rust/jit_instructions.rs @@ -5100,6 +5100,19 @@ pub fn instr_660F29_mem_jit(ctx: &mut JitContext, modrm_byte: ModrmByte, r: u32) } pub fn instr_660F29_reg_jit(ctx: &mut JitContext, r1: u32, r2: u32) { sse_mov_xmm_xmm(ctx, r2, r1) } +pub fn instr_0F2A_mem_jit(ctx: &mut JitContext, modrm_byte: ModrmByte, r: u32) { + mmx_read64_mm_mem(ctx, "instr_0F2A", modrm_byte, r); +} +pub fn instr_0F2A_reg_jit(ctx: &mut JitContext, r1: u32, r2: u32) { + mmx_read64_mm_mm(ctx, "instr_0F2A", r1, r2); +} +pub fn instr_660F2A_mem_jit(ctx: &mut JitContext, modrm_byte: ModrmByte, r: u32) { + mmx_read64_mm_mem(ctx, "instr_660F2A", modrm_byte, r); +} +pub fn instr_660F2A_reg_jit(ctx: &mut JitContext, r1: u32, r2: u32) { + mmx_read64_mm_mm(ctx, "instr_660F2A", r1, r2); +} + pub fn instr_0F2B_mem_jit(ctx: &mut JitContext, modrm_byte: ModrmByte, r: u32) { instr_0F29_mem_jit(ctx, modrm_byte, r) }