diff --git a/gen/x86_table.js b/gen/x86_table.js index 19ca2a2e..913d2ede 100644 --- a/gen/x86_table.js +++ b/gen/x86_table.js @@ -692,14 +692,14 @@ const encodings = [ { sse: 1, opcode: 0x0F57, e: 1, custom: 1 }, { sse: 1, opcode: 0x660F57, e: 1, custom: 1 }, - { sse: 1, opcode: 0x0F58, e: 1, }, - { sse: 1, opcode: 0x660F58, e: 1, }, - { sse: 1, opcode: 0xF20F58, e: 1, }, - { sse: 1, opcode: 0xF30F58, e: 1, }, - { sse: 1, opcode: 0x0F59, e: 1, }, - { sse: 1, opcode: 0x660F59, e: 1, }, - { sse: 1, opcode: 0xF20F59, e: 1, }, - { sse: 1, opcode: 0xF30F59, e: 1, }, + { sse: 1, opcode: 0x0F58, e: 1, custom: 1 }, + { sse: 1, opcode: 0x660F58, e: 1, custom: 1 }, + { sse: 1, opcode: 0xF20F58, e: 1, custom: 1 }, + { sse: 1, opcode: 0xF30F58, e: 1, custom: 1 }, + { sse: 1, opcode: 0x0F59, e: 1, custom: 1 }, + { sse: 1, opcode: 0x660F59, e: 1, custom: 1 }, + { sse: 1, opcode: 0xF20F59, e: 1, custom: 1 }, + { sse: 1, opcode: 0xF30F59, e: 1, custom: 1 }, { sse: 1, opcode: 0x0F5A, e: 1, }, { sse: 1, opcode: 0x660F5A, e: 1, }, @@ -710,23 +710,23 @@ const encodings = [ // no F2 variant { sse: 1, opcode: 0xF30F5B, e: 1, }, - { sse: 1, opcode: 0x0F5C, e: 1, }, - { sse: 1, opcode: 0x660F5C, e: 1, }, - { sse: 1, opcode: 0xF20F5C, e: 1, }, - { sse: 1, opcode: 0xF30F5C, e: 1, }, - { sse: 1, opcode: 0x0F5D, e: 1, }, - { sse: 1, opcode: 0x660F5D, e: 1, }, - { sse: 1, opcode: 0xF20F5D, e: 1, }, - { sse: 1, opcode: 0xF30F5D, e: 1, }, + { sse: 1, opcode: 0x0F5C, e: 1, custom: 1 }, + { sse: 1, opcode: 0x660F5C, e: 1, custom: 1 }, + { sse: 1, opcode: 0xF20F5C, e: 1, custom: 1 }, + { sse: 1, opcode: 0xF30F5C, e: 1, custom: 1 }, + { sse: 1, opcode: 0x0F5D, e: 1, custom: 1 }, + { sse: 1, opcode: 0x660F5D, e: 1, custom: 1 }, + { sse: 1, opcode: 0xF20F5D, e: 1, custom: 1 }, + { sse: 1, opcode: 0xF30F5D, e: 1, custom: 1 }, - { sse: 1, opcode: 0x0F5E, e: 1, }, - { sse: 1, opcode: 0x660F5E, e: 1, }, - { sse: 1, opcode: 0xF20F5E, e: 1, }, - { sse: 1, opcode: 0xF30F5E, e: 1, }, - { sse: 1, opcode: 0x0F5F, e: 1, }, - { sse: 1, opcode: 0x660F5F, e: 1, }, - { sse: 1, opcode: 0xF20F5F, e: 1, }, - { sse: 1, opcode: 0xF30F5F, e: 1, }, + { sse: 1, opcode: 0x0F5E, e: 1, custom: 1 }, + { sse: 1, opcode: 0x660F5E, e: 1, custom: 1 }, + { sse: 1, opcode: 0xF20F5E, e: 1, custom: 1 }, + { sse: 1, opcode: 0xF30F5E, e: 1, custom: 1 }, + { sse: 1, opcode: 0x0F5F, e: 1, custom: 1 }, + { sse: 1, opcode: 0x660F5F, e: 1, custom: 1 }, + { sse: 1, opcode: 0xF20F5F, e: 1, custom: 1 }, + { sse: 1, opcode: 0xF30F5F, e: 1, custom: 1 }, { sse: 1, opcode: 0x660F60, e: 1, custom: 1 }, { sse: 1, opcode: 0x0F60, e: 1, custom: 1 }, diff --git a/src/rust/cpu/instructions_0f.rs b/src/rust/cpu/instructions_0f.rs index 0634a09b..dee11213 100644 --- a/src/rust/cpu/instructions_0f.rs +++ b/src/rust/cpu/instructions_0f.rs @@ -1764,6 +1764,7 @@ pub unsafe fn instr_660F57_mem(addr: i32, r: i32) { instr_660F57(return_on_pagefault!(safe_read128s(addr)), r); } +#[no_mangle] pub unsafe fn instr_0F58(source: reg128, r: i32) { // addps xmm, xmm/mem128 let destination = read_xmm128s(r); @@ -1777,12 +1778,11 @@ pub unsafe fn instr_0F58(source: reg128, r: i32) { }; write_xmm_reg128(r, result); } -#[no_mangle] pub unsafe fn instr_0F58_reg(r1: i32, r2: i32) { instr_0F58(read_xmm128s(r1), r2); } -#[no_mangle] pub unsafe fn instr_0F58_mem(addr: i32, r: i32) { instr_0F58(return_on_pagefault!(safe_read128s(addr)), r); } +#[no_mangle] pub unsafe fn instr_660F58(source: reg128, r: i32) { // addpd xmm, xmm/mem128 let destination = read_xmm128s(r); @@ -1794,36 +1794,33 @@ pub unsafe fn instr_660F58(source: reg128, r: i32) { }; write_xmm_reg128(r, result); } -#[no_mangle] pub unsafe fn instr_660F58_reg(r1: i32, r2: i32) { instr_660F58(read_xmm128s(r1), r2); } -#[no_mangle] pub unsafe fn instr_660F58_mem(addr: i32, r: i32) { instr_660F58(return_on_pagefault!(safe_read128s(addr)), r); } +#[no_mangle] pub unsafe fn instr_F20F58(source: u64, r: i32) { // addsd xmm, xmm/mem64 let destination = read_xmm64s(r); write_xmm_f64(r, f64::from_bits(source) + f64::from_bits(destination)); } -#[no_mangle] pub unsafe fn instr_F20F58_reg(r1: i32, r2: i32) { instr_F20F58(read_xmm64s(r1), r2); } -#[no_mangle] pub unsafe fn instr_F20F58_mem(addr: i32, r: i32) { instr_F20F58(return_on_pagefault!(safe_read64s(addr)), r); } +#[no_mangle] pub unsafe fn instr_F30F58(source: f32, r: i32) { // addss xmm, xmm/mem32 let destination = read_xmm_f32(r); let result = source + destination; write_xmm_f32(r, result); } -#[no_mangle] pub unsafe fn instr_F30F58_reg(r1: i32, r2: i32) { instr_F30F58(read_xmm_f32(r1), r2); } -#[no_mangle] pub unsafe fn instr_F30F58_mem(addr: i32, r: i32) { instr_F30F58(return_on_pagefault!(safe_read_f32(addr)), r); } +#[no_mangle] pub unsafe fn instr_0F59(source: reg128, r: i32) { // mulps xmm, xmm/mem128 let destination = read_xmm128s(r); @@ -1837,12 +1834,11 @@ pub unsafe fn instr_0F59(source: reg128, r: i32) { }; write_xmm_reg128(r, result); } -#[no_mangle] pub unsafe fn instr_0F59_reg(r1: i32, r2: i32) { instr_0F59(read_xmm128s(r1), r2); } -#[no_mangle] pub unsafe fn instr_0F59_mem(addr: i32, r: i32) { instr_0F59(return_on_pagefault!(safe_read128s(addr)), r); } +#[no_mangle] pub unsafe fn instr_660F59(source: reg128, r: i32) { // mulpd xmm, xmm/mem128 let destination = read_xmm128s(r); @@ -1854,32 +1850,28 @@ pub unsafe fn instr_660F59(source: reg128, r: i32) { }; write_xmm_reg128(r, result); } -#[no_mangle] pub unsafe fn instr_660F59_reg(r1: i32, r2: i32) { instr_660F59(read_xmm128s(r1), r2); } -#[no_mangle] pub unsafe fn instr_660F59_mem(addr: i32, r: i32) { instr_660F59(return_on_pagefault!(safe_read128s(addr)), r); } +#[no_mangle] pub unsafe fn instr_F20F59(source: u64, r: i32) { // mulsd xmm, xmm/mem64 let destination = read_xmm64s(r); write_xmm_f64(r, f64::from_bits(source) * f64::from_bits(destination)); } -#[no_mangle] pub unsafe fn instr_F20F59_reg(r1: i32, r2: i32) { instr_F20F59(read_xmm64s(r1), r2); } -#[no_mangle] pub unsafe fn instr_F20F59_mem(addr: i32, r: i32) { instr_F20F59(return_on_pagefault!(safe_read64s(addr)), r); } +#[no_mangle] pub unsafe fn instr_F30F59(source: f32, r: i32) { // mulss xmm, xmm/mem32 let destination = read_xmm_f32(r); let result = source * destination; write_xmm_f32(r, result); } -#[no_mangle] pub unsafe fn instr_F30F59_reg(r1: i32, r2: i32) { instr_F30F59(read_xmm_f32(r1), r2); } -#[no_mangle] pub unsafe fn instr_F30F59_mem(addr: i32, r: i32) { instr_F30F59(return_on_pagefault!(safe_read_f32(addr)), r); } @@ -1992,6 +1984,7 @@ pub unsafe fn instr_F30F5B_mem(addr: i32, r: i32) { instr_F30F5B(return_on_pagefault!(safe_read128s(addr)), r); } +#[no_mangle] pub unsafe fn instr_0F5C(source: reg128, r: i32) { // subps xmm, xmm/mem128 let destination = read_xmm128s(r); @@ -2005,12 +1998,11 @@ pub unsafe fn instr_0F5C(source: reg128, r: i32) { }; write_xmm_reg128(r, result); } -#[no_mangle] pub unsafe fn instr_0F5C_reg(r1: i32, r2: i32) { instr_0F5C(read_xmm128s(r1), r2); } -#[no_mangle] pub unsafe fn instr_0F5C_mem(addr: i32, r: i32) { instr_0F5C(return_on_pagefault!(safe_read128s(addr)), r); } +#[no_mangle] pub unsafe fn instr_660F5C(source: reg128, r: i32) { // subpd xmm, xmm/mem128 let destination = read_xmm128s(r); @@ -2022,35 +2014,32 @@ pub unsafe fn instr_660F5C(source: reg128, r: i32) { }; write_xmm_reg128(r, result); } -#[no_mangle] pub unsafe fn instr_660F5C_reg(r1: i32, r2: i32) { instr_660F5C(read_xmm128s(r1), r2); } -#[no_mangle] pub unsafe fn instr_660F5C_mem(addr: i32, r: i32) { instr_660F5C(return_on_pagefault!(safe_read128s(addr)), r); } +#[no_mangle] pub unsafe fn instr_F20F5C(source: u64, r: i32) { // subsd xmm, xmm/mem64 let destination = read_xmm64s(r); write_xmm_f64(r, f64::from_bits(destination) - f64::from_bits(source)); } -#[no_mangle] pub unsafe fn instr_F20F5C_reg(r1: i32, r2: i32) { instr_F20F5C(read_xmm64s(r1), r2); } -#[no_mangle] pub unsafe fn instr_F20F5C_mem(addr: i32, r: i32) { instr_F20F5C(return_on_pagefault!(safe_read64s(addr)), r); } +#[no_mangle] pub unsafe fn instr_F30F5C(source: f32, r: i32) { // subss xmm, xmm/mem32 let destination = read_xmm_f32(r); let result = destination - source; write_xmm_f32(r, result); } -#[no_mangle] pub unsafe fn instr_F30F5C_reg(r1: i32, r2: i32) { instr_F30F5C(read_xmm_f32(r1), r2); } -#[no_mangle] pub unsafe fn instr_F30F5C_mem(addr: i32, r: i32) { instr_F30F5C(return_on_pagefault!(safe_read_f32(addr)), r); } +#[no_mangle] pub unsafe fn instr_0F5D(source: reg128, r: i32) { // minps xmm, xmm/mem128 let destination = read_xmm128s(r); @@ -2064,12 +2053,11 @@ pub unsafe fn instr_0F5D(source: reg128, r: i32) { }; write_xmm_reg128(r, result); } -#[no_mangle] pub unsafe fn instr_0F5D_reg(r1: i32, r2: i32) { instr_0F5D(read_xmm128s(r1), r2); } -#[no_mangle] pub unsafe fn instr_0F5D_mem(addr: i32, r: i32) { instr_0F5D(return_on_pagefault!(safe_read128s(addr)), r); } +#[no_mangle] pub unsafe fn instr_660F5D(source: reg128, r: i32) { // minpd xmm, xmm/mem128 let destination = read_xmm128s(r); @@ -2081,12 +2069,11 @@ pub unsafe fn instr_660F5D(source: reg128, r: i32) { }; write_xmm_reg128(r, result); } -#[no_mangle] pub unsafe fn instr_660F5D_reg(r1: i32, r2: i32) { instr_660F5D(read_xmm128s(r1), r2); } -#[no_mangle] pub unsafe fn instr_660F5D_mem(addr: i32, r: i32) { instr_660F5D(return_on_pagefault!(safe_read128s(addr)), r); } +#[no_mangle] pub unsafe fn instr_F20F5D(source: u64, r: i32) { // minsd xmm, xmm/mem64 let destination = read_xmm64s(r); @@ -2095,24 +2082,22 @@ pub unsafe fn instr_F20F5D(source: u64, r: i32) { sse_min(f64::from_bits(destination), f64::from_bits(source)), ); } -#[no_mangle] pub unsafe fn instr_F20F5D_reg(r1: i32, r2: i32) { instr_F20F5D(read_xmm64s(r1), r2); } -#[no_mangle] pub unsafe fn instr_F20F5D_mem(addr: i32, r: i32) { instr_F20F5D(return_on_pagefault!(safe_read64s(addr)), r); } +#[no_mangle] pub unsafe fn instr_F30F5D(source: f32, r: i32) { // minss xmm, xmm/mem32 let destination = read_xmm_f32(r); let result = sse_min(destination as f64, source as f64) as f32; write_xmm_f32(r, result); } -#[no_mangle] pub unsafe fn instr_F30F5D_reg(r1: i32, r2: i32) { instr_F30F5D(read_xmm_f32(r1), r2); } -#[no_mangle] pub unsafe fn instr_F30F5D_mem(addr: i32, r: i32) { instr_F30F5D(return_on_pagefault!(safe_read_f32(addr)), r); } +#[no_mangle] pub unsafe fn instr_0F5E(source: reg128, r: i32) { // divps xmm, xmm/mem128 let destination = read_xmm128s(r); @@ -2126,12 +2111,11 @@ pub unsafe fn instr_0F5E(source: reg128, r: i32) { }; write_xmm_reg128(r, result); } -#[no_mangle] pub unsafe fn instr_0F5E_reg(r1: i32, r2: i32) { instr_0F5E(read_xmm128s(r1), r2); } -#[no_mangle] pub unsafe fn instr_0F5E_mem(addr: i32, r: i32) { instr_0F5E(return_on_pagefault!(safe_read128s(addr)), r); } +#[no_mangle] pub unsafe fn instr_660F5E(source: reg128, r: i32) { // divpd xmm, xmm/mem128 let destination = read_xmm128s(r); @@ -2143,35 +2127,32 @@ pub unsafe fn instr_660F5E(source: reg128, r: i32) { }; write_xmm_reg128(r, result); } -#[no_mangle] pub unsafe fn instr_660F5E_reg(r1: i32, r2: i32) { instr_660F5E(read_xmm128s(r1), r2); } -#[no_mangle] pub unsafe fn instr_660F5E_mem(addr: i32, r: i32) { instr_660F5E(return_on_pagefault!(safe_read128s(addr)), r); } +#[no_mangle] pub unsafe fn instr_F20F5E(source: u64, r: i32) { // divsd xmm, xmm/mem64 let destination = read_xmm64s(r); write_xmm_f64(r, f64::from_bits(destination) / f64::from_bits(source)); } -#[no_mangle] pub unsafe fn instr_F20F5E_reg(r1: i32, r2: i32) { instr_F20F5E(read_xmm64s(r1), r2); } -#[no_mangle] pub unsafe fn instr_F20F5E_mem(addr: i32, r: i32) { instr_F20F5E(return_on_pagefault!(safe_read64s(addr)), r); } +#[no_mangle] pub unsafe fn instr_F30F5E(source: f32, r: i32) { // divss xmm, xmm/mem32 let destination = read_xmm_f32(r); let result = destination / source; write_xmm_f32(r, result); } -#[no_mangle] pub unsafe fn instr_F30F5E_reg(r1: i32, r2: i32) { instr_F30F5E(read_xmm_f32(r1), r2); } -#[no_mangle] pub unsafe fn instr_F30F5E_mem(addr: i32, r: i32) { instr_F30F5E(return_on_pagefault!(safe_read_f32(addr)), r); } +#[no_mangle] pub unsafe fn instr_0F5F(source: reg128, r: i32) { // maxps xmm, xmm/mem128 let destination = read_xmm128s(r); @@ -2185,12 +2166,11 @@ pub unsafe fn instr_0F5F(source: reg128, r: i32) { }; write_xmm_reg128(r, result); } -#[no_mangle] pub unsafe fn instr_0F5F_reg(r1: i32, r2: i32) { instr_0F5F(read_xmm128s(r1), r2); } -#[no_mangle] pub unsafe fn instr_0F5F_mem(addr: i32, r: i32) { instr_0F5F(return_on_pagefault!(safe_read128s(addr)), r); } +#[no_mangle] pub unsafe fn instr_660F5F(source: reg128, r: i32) { // maxpd xmm, xmm/mem128 let destination = read_xmm128s(r); @@ -2202,12 +2182,11 @@ pub unsafe fn instr_660F5F(source: reg128, r: i32) { }; write_xmm_reg128(r, result); } -#[no_mangle] pub unsafe fn instr_660F5F_reg(r1: i32, r2: i32) { instr_660F5F(read_xmm128s(r1), r2); } -#[no_mangle] pub unsafe fn instr_660F5F_mem(addr: i32, r: i32) { instr_660F5F(return_on_pagefault!(safe_read128s(addr)), r); } +#[no_mangle] pub unsafe fn instr_F20F5F(source: u64, r: i32) { // maxsd xmm, xmm/mem64 let destination = read_xmm64s(r); @@ -2216,21 +2195,18 @@ pub unsafe fn instr_F20F5F(source: u64, r: i32) { sse_max(f64::from_bits(destination), f64::from_bits(source)), ); } -#[no_mangle] pub unsafe fn instr_F20F5F_reg(r1: i32, r2: i32) { instr_F20F5F(read_xmm64s(r1), r2); } -#[no_mangle] pub unsafe fn instr_F20F5F_mem(addr: i32, r: i32) { instr_F20F5F(return_on_pagefault!(safe_read64s(addr)), r); } +#[no_mangle] pub unsafe fn instr_F30F5F(source: f32, r: i32) { // maxss xmm, xmm/mem32 let destination = read_xmm_f32(r); let result = sse_max(destination as f64, source as f64) as f32; write_xmm_f32(r, result); } -#[no_mangle] pub unsafe fn instr_F30F5F_reg(r1: i32, r2: i32) { instr_F30F5F(read_xmm_f32(r1), r2); } -#[no_mangle] pub unsafe fn instr_F30F5F_mem(addr: i32, r: i32) { instr_F30F5F(return_on_pagefault!(safe_read_f32(addr)), r); } diff --git a/src/rust/jit_instructions.rs b/src/rust/jit_instructions.rs index 0277e257..d9a64add 100644 --- a/src/rust/jit_instructions.rs +++ b/src/rust/jit_instructions.rs @@ -5248,6 +5248,156 @@ pub fn instr_660F57_reg_jit(ctx: &mut JitContext, r1: u32, r2: u32) { sse_read128_xmm_xmm(ctx, "instr_660F57", r1, r2); } +pub fn instr_0F58_mem_jit(ctx: &mut JitContext, modrm_byte: ModrmByte, r: u32) { + sse_read128_xmm_mem(ctx, "instr_0F58", modrm_byte, r); +} +pub fn instr_0F58_reg_jit(ctx: &mut JitContext, r1: u32, r2: u32) { + sse_read128_xmm_xmm(ctx, "instr_0F58", r1, r2); +} +pub fn instr_660F58_mem_jit(ctx: &mut JitContext, modrm_byte: ModrmByte, r: u32) { + sse_read128_xmm_mem(ctx, "instr_660F58", modrm_byte, r); +} +pub fn instr_660F58_reg_jit(ctx: &mut JitContext, r1: u32, r2: u32) { + sse_read128_xmm_xmm(ctx, "instr_660F58", r1, r2); +} +pub fn instr_F20F58_mem_jit(ctx: &mut JitContext, modrm_byte: ModrmByte, r: u32) { + sse_read64_xmm_mem(ctx, "instr_F20F58", modrm_byte, r); +} +pub fn instr_F20F58_reg_jit(ctx: &mut JitContext, r1: u32, r2: u32) { + sse_read64_xmm_xmm(ctx, "instr_F20F58", r1, r2); +} +pub fn instr_F30F58_mem_jit(ctx: &mut JitContext, modrm_byte: ModrmByte, r: u32) { + sse_read_f32_xmm_mem(ctx, "instr_F30F58", modrm_byte, r); +} +pub fn instr_F30F58_reg_jit(ctx: &mut JitContext, r1: u32, r2: u32) { + sse_read_f32_xmm_xmm(ctx, "instr_F30F58", r1, r2); +} + +pub fn instr_0F59_mem_jit(ctx: &mut JitContext, modrm_byte: ModrmByte, r: u32) { + sse_read128_xmm_mem(ctx, "instr_0F59", modrm_byte, r); +} +pub fn instr_0F59_reg_jit(ctx: &mut JitContext, r1: u32, r2: u32) { + sse_read128_xmm_xmm(ctx, "instr_0F59", r1, r2); +} +pub fn instr_660F59_mem_jit(ctx: &mut JitContext, modrm_byte: ModrmByte, r: u32) { + sse_read128_xmm_mem(ctx, "instr_660F59", modrm_byte, r); +} +pub fn instr_660F59_reg_jit(ctx: &mut JitContext, r1: u32, r2: u32) { + sse_read128_xmm_xmm(ctx, "instr_660F59", r1, r2); +} +pub fn instr_F20F59_mem_jit(ctx: &mut JitContext, modrm_byte: ModrmByte, r: u32) { + sse_read64_xmm_mem(ctx, "instr_F20F59", modrm_byte, r); +} +pub fn instr_F20F59_reg_jit(ctx: &mut JitContext, r1: u32, r2: u32) { + sse_read64_xmm_xmm(ctx, "instr_F20F59", r1, r2); +} +pub fn instr_F30F59_mem_jit(ctx: &mut JitContext, modrm_byte: ModrmByte, r: u32) { + sse_read_f32_xmm_mem(ctx, "instr_F30F59", modrm_byte, r); +} +pub fn instr_F30F59_reg_jit(ctx: &mut JitContext, r1: u32, r2: u32) { + sse_read_f32_xmm_xmm(ctx, "instr_F30F59", r1, r2); +} + +pub fn instr_0F5C_mem_jit(ctx: &mut JitContext, modrm_byte: ModrmByte, r: u32) { + sse_read128_xmm_mem(ctx, "instr_0F5C", modrm_byte, r); +} +pub fn instr_0F5C_reg_jit(ctx: &mut JitContext, r1: u32, r2: u32) { + sse_read128_xmm_xmm(ctx, "instr_0F5C", r1, r2); +} +pub fn instr_660F5C_mem_jit(ctx: &mut JitContext, modrm_byte: ModrmByte, r: u32) { + sse_read128_xmm_mem(ctx, "instr_660F5C", modrm_byte, r); +} +pub fn instr_660F5C_reg_jit(ctx: &mut JitContext, r1: u32, r2: u32) { + sse_read128_xmm_xmm(ctx, "instr_660F5C", r1, r2); +} +pub fn instr_F20F5C_mem_jit(ctx: &mut JitContext, modrm_byte: ModrmByte, r: u32) { + sse_read64_xmm_mem(ctx, "instr_F20F5C", modrm_byte, r); +} +pub fn instr_F20F5C_reg_jit(ctx: &mut JitContext, r1: u32, r2: u32) { + sse_read64_xmm_xmm(ctx, "instr_F20F5C", r1, r2); +} +pub fn instr_F30F5C_mem_jit(ctx: &mut JitContext, modrm_byte: ModrmByte, r: u32) { + sse_read_f32_xmm_mem(ctx, "instr_F30F5C", modrm_byte, r); +} +pub fn instr_F30F5C_reg_jit(ctx: &mut JitContext, r1: u32, r2: u32) { + sse_read_f32_xmm_xmm(ctx, "instr_F30F5C", r1, r2); +} + +pub fn instr_0F5D_mem_jit(ctx: &mut JitContext, modrm_byte: ModrmByte, r: u32) { + sse_read128_xmm_mem(ctx, "instr_0F5D", modrm_byte, r); +} +pub fn instr_0F5D_reg_jit(ctx: &mut JitContext, r1: u32, r2: u32) { + sse_read128_xmm_xmm(ctx, "instr_0F5D", r1, r2); +} +pub fn instr_660F5D_mem_jit(ctx: &mut JitContext, modrm_byte: ModrmByte, r: u32) { + sse_read128_xmm_mem(ctx, "instr_660F5D", modrm_byte, r); +} +pub fn instr_660F5D_reg_jit(ctx: &mut JitContext, r1: u32, r2: u32) { + sse_read128_xmm_xmm(ctx, "instr_660F5D", r1, r2); +} +pub fn instr_F20F5D_mem_jit(ctx: &mut JitContext, modrm_byte: ModrmByte, r: u32) { + sse_read64_xmm_mem(ctx, "instr_F20F5D", modrm_byte, r); +} +pub fn instr_F20F5D_reg_jit(ctx: &mut JitContext, r1: u32, r2: u32) { + sse_read64_xmm_xmm(ctx, "instr_F20F5D", r1, r2); +} +pub fn instr_F30F5D_mem_jit(ctx: &mut JitContext, modrm_byte: ModrmByte, r: u32) { + sse_read_f32_xmm_mem(ctx, "instr_F30F5D", modrm_byte, r); +} +pub fn instr_F30F5D_reg_jit(ctx: &mut JitContext, r1: u32, r2: u32) { + sse_read_f32_xmm_xmm(ctx, "instr_F30F5D", r1, r2); +} + +pub fn instr_0F5E_mem_jit(ctx: &mut JitContext, modrm_byte: ModrmByte, r: u32) { + sse_read128_xmm_mem(ctx, "instr_0F5E", modrm_byte, r); +} +pub fn instr_0F5E_reg_jit(ctx: &mut JitContext, r1: u32, r2: u32) { + sse_read128_xmm_xmm(ctx, "instr_0F5E", r1, r2); +} +pub fn instr_660F5E_mem_jit(ctx: &mut JitContext, modrm_byte: ModrmByte, r: u32) { + sse_read128_xmm_mem(ctx, "instr_660F5E", modrm_byte, r); +} +pub fn instr_660F5E_reg_jit(ctx: &mut JitContext, r1: u32, r2: u32) { + sse_read128_xmm_xmm(ctx, "instr_660F5E", r1, r2); +} +pub fn instr_F20F5E_mem_jit(ctx: &mut JitContext, modrm_byte: ModrmByte, r: u32) { + sse_read64_xmm_mem(ctx, "instr_F20F5E", modrm_byte, r); +} +pub fn instr_F20F5E_reg_jit(ctx: &mut JitContext, r1: u32, r2: u32) { + sse_read64_xmm_xmm(ctx, "instr_F20F5E", r1, r2); +} +pub fn instr_F30F5E_mem_jit(ctx: &mut JitContext, modrm_byte: ModrmByte, r: u32) { + sse_read_f32_xmm_mem(ctx, "instr_F30F5E", modrm_byte, r); +} +pub fn instr_F30F5E_reg_jit(ctx: &mut JitContext, r1: u32, r2: u32) { + sse_read_f32_xmm_xmm(ctx, "instr_F30F5E", r1, r2); +} + +pub fn instr_0F5F_mem_jit(ctx: &mut JitContext, modrm_byte: ModrmByte, r: u32) { + sse_read128_xmm_mem(ctx, "instr_0F5F", modrm_byte, r); +} +pub fn instr_0F5F_reg_jit(ctx: &mut JitContext, r1: u32, r2: u32) { + sse_read128_xmm_xmm(ctx, "instr_0F5F", r1, r2); +} +pub fn instr_660F5F_mem_jit(ctx: &mut JitContext, modrm_byte: ModrmByte, r: u32) { + sse_read128_xmm_mem(ctx, "instr_660F5F", modrm_byte, r); +} +pub fn instr_660F5F_reg_jit(ctx: &mut JitContext, r1: u32, r2: u32) { + sse_read128_xmm_xmm(ctx, "instr_660F5F", r1, r2); +} +pub fn instr_F20F5F_mem_jit(ctx: &mut JitContext, modrm_byte: ModrmByte, r: u32) { + sse_read64_xmm_mem(ctx, "instr_F20F5F", modrm_byte, r); +} +pub fn instr_F20F5F_reg_jit(ctx: &mut JitContext, r1: u32, r2: u32) { + sse_read64_xmm_xmm(ctx, "instr_F20F5F", r1, r2); +} +pub fn instr_F30F5F_mem_jit(ctx: &mut JitContext, modrm_byte: ModrmByte, r: u32) { + sse_read_f32_xmm_mem(ctx, "instr_F30F5F", modrm_byte, r); +} +pub fn instr_F30F5F_reg_jit(ctx: &mut JitContext, r1: u32, r2: u32) { + sse_read_f32_xmm_xmm(ctx, "instr_F30F5F", r1, r2); +} + pub fn instr_0F60_mem_jit(ctx: &mut JitContext, modrm_byte: ModrmByte, r: u32) { mmx_read64_mm_mem32(ctx, "instr_0F60", modrm_byte, r); }