Infer REX prefixes for SIMD load and store with displacement
This commit is contained in:
@@ -1866,8 +1866,8 @@ fn define_simd(
|
||||
// Store
|
||||
let bound_store = store.bind(vector(ty, sse_vector_size)).bind(Any);
|
||||
e.enc_both_inferred(bound_store.clone(), rec_fst.opcodes(&MOVUPS_STORE));
|
||||
e.enc_both(bound_store.clone(), rec_fstDisp8.opcodes(&MOVUPS_STORE));
|
||||
e.enc_both(bound_store, rec_fstDisp32.opcodes(&MOVUPS_STORE));
|
||||
e.enc_both_inferred(bound_store.clone(), rec_fstDisp8.opcodes(&MOVUPS_STORE));
|
||||
e.enc_both_inferred(bound_store, rec_fstDisp32.opcodes(&MOVUPS_STORE));
|
||||
|
||||
// Store complex
|
||||
let bound_store_complex = store_complex.bind(vector(ty, sse_vector_size));
|
||||
@@ -1887,8 +1887,8 @@ fn define_simd(
|
||||
// Load
|
||||
let bound_load = load.bind(vector(ty, sse_vector_size)).bind(Any);
|
||||
e.enc_both_inferred(bound_load.clone(), rec_fld.opcodes(&MOVUPS_LOAD));
|
||||
e.enc_both(bound_load.clone(), rec_fldDisp8.opcodes(&MOVUPS_LOAD));
|
||||
e.enc_both(bound_load, rec_fldDisp32.opcodes(&MOVUPS_LOAD));
|
||||
e.enc_both_inferred(bound_load.clone(), rec_fldDisp8.opcodes(&MOVUPS_LOAD));
|
||||
e.enc_both_inferred(bound_load, rec_fldDisp32.opcodes(&MOVUPS_LOAD));
|
||||
|
||||
// Load complex
|
||||
let bound_load_complex = load_complex.bind(vector(ty, sse_vector_size));
|
||||
|
||||
@@ -1604,7 +1604,7 @@ pub(crate) fn define<'shared>(
|
||||
);
|
||||
|
||||
// XX /r register-indirect store with 8-bit offset of FPR.
|
||||
recipes.add_template_recipe(
|
||||
recipes.add_template_inferred(
|
||||
EncodingRecipeBuilder::new("fstDisp8", &formats.store, 2)
|
||||
.operands_in(vec![fpr, gpr])
|
||||
.inst_predicate(has_small_offset)
|
||||
@@ -1626,6 +1626,7 @@ pub(crate) fn define<'shared>(
|
||||
sink.put1(offset as u8);
|
||||
"#,
|
||||
),
|
||||
"size_plus_maybe_sib_inreg1_plus_rex_prefix_for_inreg0_inreg1",
|
||||
);
|
||||
|
||||
// XX /r register-indirect store with 32-bit offset.
|
||||
@@ -1682,7 +1683,7 @@ pub(crate) fn define<'shared>(
|
||||
);
|
||||
|
||||
// XX /r register-indirect store with 32-bit offset of FPR.
|
||||
recipes.add_template_recipe(
|
||||
recipes.add_template_inferred(
|
||||
EncodingRecipeBuilder::new("fstDisp32", &formats.store, 5)
|
||||
.operands_in(vec![fpr, gpr])
|
||||
.clobbers_flags(false)
|
||||
@@ -1703,6 +1704,7 @@ pub(crate) fn define<'shared>(
|
||||
sink.put4(offset as u32);
|
||||
"#,
|
||||
),
|
||||
"size_plus_maybe_sib_inreg1_plus_rex_prefix_for_inreg0_inreg1",
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user