Allow passing arbitrary MemFlags to emit_small_mem{cpy,move}

This commit is contained in:
bjorn3
2021-03-20 18:46:16 +01:00
parent 8e43e96410
commit 1639f2c844

View File

@@ -640,6 +640,7 @@ impl<'a> FunctionBuilder<'a> {
dest_align: u8, dest_align: u8,
src_align: u8, src_align: u8,
non_overlapping: bool, non_overlapping: bool,
mut flags: MemFlags,
) { ) {
// Currently the result of guess work, not actual profiling. // Currently the result of guess work, not actual profiling.
const THRESHOLD: u64 = 4; const THRESHOLD: u64 = 4;
@@ -676,7 +677,6 @@ impl<'a> FunctionBuilder<'a> {
return; return;
} }
let mut flags = MemFlags::new();
flags.set_aligned(); flags.set_aligned();
// Load all of the memory first. This is necessary in case `dest` overlaps. // Load all of the memory first. This is necessary in case `dest` overlaps.
@@ -732,6 +732,7 @@ impl<'a> FunctionBuilder<'a> {
ch: u8, ch: u8,
size: u64, size: u64,
buffer_align: u8, buffer_align: u8,
mut flags: MemFlags,
) { ) {
// Currently the result of guess work, not actual profiling. // Currently the result of guess work, not actual profiling.
const THRESHOLD: u64 = 4; const THRESHOLD: u64 = 4;
@@ -763,7 +764,6 @@ impl<'a> FunctionBuilder<'a> {
let size = self.ins().iconst(config.pointer_type(), size as i64); let size = self.ins().iconst(config.pointer_type(), size as i64);
self.call_memset(config, buffer, ch, size); self.call_memset(config, buffer, ch, size);
} else { } else {
let mut flags = MemFlags::new();
flags.set_aligned(); flags.set_aligned();
let ch = u64::from(ch); let ch = u64::from(ch);
@@ -851,7 +851,9 @@ mod tests {
use alloc::string::ToString; use alloc::string::ToString;
use cranelift_codegen::entity::EntityRef; use cranelift_codegen::entity::EntityRef;
use cranelift_codegen::ir::types::*; use cranelift_codegen::ir::types::*;
use cranelift_codegen::ir::{AbiParam, ExternalName, Function, InstBuilder, Signature}; use cranelift_codegen::ir::{
AbiParam, ExternalName, Function, InstBuilder, MemFlags, Signature,
};
use cranelift_codegen::isa::CallConv; use cranelift_codegen::isa::CallConv;
use cranelift_codegen::settings; use cranelift_codegen::settings;
use cranelift_codegen::verifier::verify_function; use cranelift_codegen::verifier::verify_function;
@@ -1063,7 +1065,16 @@ block0:
let src = builder.use_var(x); let src = builder.use_var(x);
let dest = builder.use_var(y); let dest = builder.use_var(y);
let size = 8; let size = 8;
builder.emit_small_memory_copy(target.frontend_config(), dest, src, size, 8, 8, true); builder.emit_small_memory_copy(
target.frontend_config(),
dest,
src,
size,
8,
8,
true,
MemFlags::new(),
);
builder.ins().return_(&[dest]); builder.ins().return_(&[dest]);
builder.seal_all_blocks(); builder.seal_all_blocks();
@@ -1121,7 +1132,16 @@ block0:
let src = builder.use_var(x); let src = builder.use_var(x);
let dest = builder.use_var(y); let dest = builder.use_var(y);
let size = 8192; let size = 8192;
builder.emit_small_memory_copy(target.frontend_config(), dest, src, size, 8, 8, true); builder.emit_small_memory_copy(
target.frontend_config(),
dest,
src,
size,
8,
8,
true,
MemFlags::new(),
);
builder.ins().return_(&[dest]); builder.ins().return_(&[dest]);
builder.seal_all_blocks(); builder.seal_all_blocks();
@@ -1179,7 +1199,7 @@ block0:
let dest = builder.use_var(y); let dest = builder.use_var(y);
let size = 8; let size = 8;
builder.emit_small_memset(target.frontend_config(), dest, 1, size, 8); builder.emit_small_memset(target.frontend_config(), dest, 1, size, 8, MemFlags::new());
builder.ins().return_(&[dest]); builder.ins().return_(&[dest]);
builder.seal_all_blocks(); builder.seal_all_blocks();
@@ -1232,7 +1252,7 @@ block0:
let dest = builder.use_var(y); let dest = builder.use_var(y);
let size = 8192; let size = 8192;
builder.emit_small_memset(target.frontend_config(), dest, 1, size, 8); builder.emit_small_memset(target.frontend_config(), dest, 1, size, 8, MemFlags::new());
builder.ins().return_(&[dest]); builder.ins().return_(&[dest]);
builder.seal_all_blocks(); builder.seal_all_blocks();