jit {,F3}0F53 (rcp{ps,ss})
This commit is contained in:
parent
38c484629d
commit
03566c2067
|
@ -680,8 +680,8 @@ const encodings = [
|
|||
{ sse: 1, opcode: 0xF30F52, e: 1, skip: 1, custom: 1 },
|
||||
|
||||
// reciprocal: approximation of 1/x. Skipped because our approximation doesn't match intel's
|
||||
{ sse: 1, opcode: 0x0F53, e: 1, skip: 1, },
|
||||
{ sse: 1, opcode: 0xF30F53, e: 1, skip: 1, },
|
||||
{ sse: 1, opcode: 0x0F53, e: 1, skip: 1, custom: 1 },
|
||||
{ sse: 1, opcode: 0xF30F53, e: 1, skip: 1, custom: 1 },
|
||||
|
||||
{ sse: 1, opcode: 0x0F54, e: 1 },
|
||||
{ sse: 1, opcode: 0x660F54, e: 1 },
|
||||
|
|
|
@ -1656,6 +1656,7 @@ pub unsafe fn instr_F30F52_mem(addr: i32, r: i32) {
|
|||
instr_F30F52(return_on_pagefault!(safe_read_f32(addr)), r);
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe fn instr_0F53(source: reg128, r: i32) {
|
||||
// rcpps xmm, xmm/m128
|
||||
let result = reg128 {
|
||||
|
@ -1668,19 +1669,16 @@ pub unsafe fn instr_0F53(source: reg128, r: i32) {
|
|||
};
|
||||
write_xmm_reg128(r, result);
|
||||
}
|
||||
#[no_mangle]
|
||||
pub unsafe fn instr_0F53_reg(r1: i32, r2: i32) { instr_0F53(read_xmm128s(r1), r2); }
|
||||
#[no_mangle]
|
||||
pub unsafe fn instr_0F53_mem(addr: i32, r: i32) {
|
||||
instr_0F53(return_on_pagefault!(safe_read128s(addr)), r);
|
||||
}
|
||||
#[no_mangle]
|
||||
pub unsafe fn instr_F30F53(source: f32, r: i32) {
|
||||
// rcpss xmm, xmm/m32
|
||||
write_xmm_f32(r, 1.0 / source);
|
||||
}
|
||||
#[no_mangle]
|
||||
pub unsafe fn instr_F30F53_reg(r1: i32, r2: i32) { instr_F30F53(read_xmm_f32(r1), r2); }
|
||||
#[no_mangle]
|
||||
pub unsafe fn instr_F30F53_mem(addr: i32, r: i32) {
|
||||
instr_F30F53(return_on_pagefault!(safe_read_f32(addr)), r);
|
||||
}
|
||||
|
|
|
@ -5183,6 +5183,19 @@ pub fn instr_F30F52_reg_jit(ctx: &mut JitContext, r1: u32, r2: u32) {
|
|||
sse_read_f32_xmm_xmm(ctx, "instr_F30F52", r1, r2);
|
||||
}
|
||||
|
||||
pub fn instr_0F53_mem_jit(ctx: &mut JitContext, modrm_byte: ModrmByte, r: u32) {
|
||||
sse_read128_xmm_mem(ctx, "instr_0F53", modrm_byte, r);
|
||||
}
|
||||
pub fn instr_0F53_reg_jit(ctx: &mut JitContext, r1: u32, r2: u32) {
|
||||
sse_read128_xmm_xmm(ctx, "instr_0F53", r1, r2);
|
||||
}
|
||||
pub fn instr_F30F53_mem_jit(ctx: &mut JitContext, modrm_byte: ModrmByte, r: u32) {
|
||||
sse_read_f32_xmm_mem(ctx, "instr_F30F53", modrm_byte, r);
|
||||
}
|
||||
pub fn instr_F30F53_reg_jit(ctx: &mut JitContext, r1: u32, r2: u32) {
|
||||
sse_read_f32_xmm_xmm(ctx, "instr_F30F53", 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);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue