jit {F2,F3}0F2A (cvtsi2ss, cvtsi2sd)
This commit is contained in:
parent
2b2d22f6d3
commit
2a22980cf7
|
@ -649,8 +649,8 @@ const encodings = [
|
|||
{ sse: 1, opcode: 0x660F29, e: 1, custom: 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: 0xF20F2A, e: 1, custom: 1 },
|
||||
{ sse: 1, opcode: 0xF30F2A, e: 1, custom: 1 },
|
||||
{ sse: 1, opcode: 0x0F2B, reg_ud: 1, e: 1, custom: 1 },
|
||||
{ sse: 1, opcode: 0x660F2B, reg_ud: 1, e: 1, custom: 1 },
|
||||
|
||||
|
|
|
@ -929,17 +929,17 @@ pub unsafe fn instr_660F2A_reg(r1: i32, r2: i32) { instr_660F2A(read_mmx64s(r1),
|
|||
pub unsafe fn instr_660F2A_mem(addr: i32, r: i32) {
|
||||
instr_660F2A(return_on_pagefault!(safe_read64s(addr)), r);
|
||||
}
|
||||
#[no_mangle]
|
||||
pub unsafe fn instr_F20F2A(source: i32, r: i32) {
|
||||
// cvtsi2sd xmm, r32/m32
|
||||
// This cast can't fail
|
||||
write_xmm_f64(r, source as f64);
|
||||
}
|
||||
#[no_mangle]
|
||||
pub unsafe fn instr_F20F2A_reg(r1: i32, r2: i32) { instr_F20F2A(read_reg32(r1), r2); }
|
||||
#[no_mangle]
|
||||
pub unsafe fn instr_F20F2A_mem(addr: i32, r: i32) {
|
||||
instr_F20F2A(return_on_pagefault!(safe_read32s(addr)), r);
|
||||
}
|
||||
#[no_mangle]
|
||||
pub unsafe fn instr_F30F2A(source: i32, r: i32) {
|
||||
// cvtsi2ss xmm, r/m32
|
||||
// Note: This cast can fail
|
||||
|
@ -947,9 +947,7 @@ pub unsafe fn instr_F30F2A(source: i32, r: i32) {
|
|||
let result = source as f32;
|
||||
write_xmm_f32(r, result);
|
||||
}
|
||||
#[no_mangle]
|
||||
pub unsafe fn instr_F30F2A_reg(r1: i32, r2: i32) { instr_F30F2A(read_reg32(r1), r2); }
|
||||
#[no_mangle]
|
||||
pub unsafe fn instr_F30F2A_mem(addr: i32, r: i32) {
|
||||
instr_F30F2A(return_on_pagefault!(safe_read32s(addr)), r);
|
||||
}
|
||||
|
|
|
@ -5112,6 +5112,26 @@ pub fn instr_660F2A_mem_jit(ctx: &mut JitContext, modrm_byte: ModrmByte, r: u32)
|
|||
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_F20F2A_mem_jit(ctx: &mut JitContext, modrm_byte: ModrmByte, r: u32) {
|
||||
codegen::gen_modrm_resolve_safe_read32(ctx, modrm_byte);
|
||||
ctx.builder.const_i32(r as i32);
|
||||
ctx.builder.call_fn2("instr_F20F2A")
|
||||
}
|
||||
pub fn instr_F20F2A_reg_jit(ctx: &mut JitContext, r1: u32, r2: u32) {
|
||||
codegen::gen_get_reg32(ctx, r1);
|
||||
ctx.builder.const_i32(r2 as i32);
|
||||
ctx.builder.call_fn2("instr_F20F2A")
|
||||
}
|
||||
pub fn instr_F30F2A_mem_jit(ctx: &mut JitContext, modrm_byte: ModrmByte, r: u32) {
|
||||
codegen::gen_modrm_resolve_safe_read32(ctx, modrm_byte);
|
||||
ctx.builder.const_i32(r as i32);
|
||||
ctx.builder.call_fn2("instr_F30F2A")
|
||||
}
|
||||
pub fn instr_F30F2A_reg_jit(ctx: &mut JitContext, r1: u32, r2: u32) {
|
||||
codegen::gen_get_reg32(ctx, r1);
|
||||
ctx.builder.const_i32(r2 as i32);
|
||||
ctx.builder.call_fn2("instr_F30F2A")
|
||||
}
|
||||
|
||||
pub fn instr_0F2B_mem_jit(ctx: &mut JitContext, modrm_byte: ModrmByte, r: u32) {
|
||||
instr_0F29_mem_jit(ctx, modrm_byte, r)
|
||||
|
|
Loading…
Reference in a new issue