jit 0fc6/shufps
This commit is contained in:
parent
1dfdc9d19a
commit
2b7b562a56
|
@ -825,7 +825,7 @@ const encodings = [
|
|||
{ sse: 1, opcode: 0x0FC5, e: 1, mem_ud: 1, imm8: 1 },
|
||||
{ sse: 1, opcode: 0x660FC5, e: 1, mem_ud: 1, imm8: 1, },
|
||||
|
||||
{ sse: 1, opcode: 0x0FC6, e: 1, imm8: 1 },
|
||||
{ sse: 1, opcode: 0x0FC6, e: 1, imm8: 1, custom: 1 },
|
||||
{ sse: 1, opcode: 0x660FC6, e: 1, imm8: 1, custom: 1 },
|
||||
|
||||
{ sse: 1, opcode: 0x0FD0, skip: 1, block_boundary: 1, }, // sse3
|
||||
|
|
|
@ -2961,6 +2961,7 @@ pub unsafe fn instr_660FC5_reg(r1: i32, r2: i32, imm8: i32) {
|
|||
write_reg32(r2, result as i32);
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe fn instr_0FC6(source: reg128, r: i32, imm8: i32) {
|
||||
// shufps xmm, xmm/mem128
|
||||
// XXX: Aligned access or #gp
|
||||
|
@ -2973,9 +2974,7 @@ pub unsafe fn instr_0FC6(source: reg128, r: i32, imm8: i32) {
|
|||
source.u32_0[(imm8 >> 6 & 3) as usize] as i32,
|
||||
);
|
||||
}
|
||||
#[no_mangle]
|
||||
pub unsafe fn instr_0FC6_reg(r1: i32, r2: i32, imm: i32) { instr_0FC6(read_xmm128s(r1), r2, imm); }
|
||||
#[no_mangle]
|
||||
pub unsafe fn instr_0FC6_mem(addr: i32, r: i32, imm: i32) {
|
||||
instr_0FC6(return_on_pagefault!(safe_read128s(addr)), r, imm);
|
||||
}
|
||||
|
|
|
@ -4589,6 +4589,21 @@ pub fn instr32_0FC7_1_mem_jit(ctx: &mut JitContext, modrm_byte: ModrmByte) {
|
|||
}
|
||||
pub fn instr32_0FC7_1_reg_jit(ctx: &mut JitContext, _r: u32) { codegen::gen_trigger_ud(ctx); }
|
||||
|
||||
pub fn instr_0FC6_reg_jit(ctx: &mut JitContext, r1: u32, r2: u32, imm8: u32) {
|
||||
let dest = global_pointers::get_reg_xmm_offset(r1);
|
||||
ctx.builder.const_i32(dest as i32);
|
||||
ctx.builder.const_i32(r2 as i32);
|
||||
ctx.builder.const_i32(imm8 as i32);
|
||||
ctx.builder.call_fn3("instr_0FC6");
|
||||
}
|
||||
pub fn instr_0FC6_mem_jit(ctx: &mut JitContext, modrm_byte: ModrmByte, r: u32, imm8: u32) {
|
||||
let dest = global_pointers::sse_scratch_register as u32;
|
||||
codegen::gen_modrm_resolve_safe_read128(ctx, modrm_byte, dest);
|
||||
ctx.builder.const_i32(dest as i32);
|
||||
ctx.builder.const_i32(r as i32);
|
||||
ctx.builder.const_i32(imm8 as i32);
|
||||
ctx.builder.call_fn3("instr_0FC6");
|
||||
}
|
||||
pub fn instr_660FC6_reg_jit(ctx: &mut JitContext, r1: u32, r2: u32, imm8: u32) {
|
||||
let dest = global_pointers::get_reg_xmm_offset(r1);
|
||||
ctx.builder.const_i32(dest as i32);
|
||||
|
|
Loading…
Reference in a new issue