Do more Vec reserving.
This commit is contained in:
@@ -160,6 +160,9 @@ impl<'data> cranelift_wasm::ModuleEnvironment<'data> for ModuleEnvironment<'data
|
||||
|
||||
fn reserve_func_types(&mut self, num: u32) {
|
||||
self.result.module.functions.reserve_exact(cast::usize(num));
|
||||
self.result
|
||||
.function_body_inputs
|
||||
.reserve_exact(cast::usize(num));
|
||||
}
|
||||
|
||||
fn declare_func_type(&mut self, sig_index: SignatureIndex) {
|
||||
|
||||
@@ -154,7 +154,6 @@ fn make_trampoline(
|
||||
builder.switch_to_block(block0);
|
||||
builder.seal_block(block0);
|
||||
|
||||
let mut callee_args = Vec::new();
|
||||
let (vmctx_ptr_val, values_vec_ptr_val) = {
|
||||
let params = builder.func.dfg.ebb_params(block0);
|
||||
(params[0], params[1])
|
||||
@@ -162,8 +161,12 @@ fn make_trampoline(
|
||||
|
||||
// Load the argument values out of `values_vec`.
|
||||
let mflags = ir::MemFlags::trusted();
|
||||
for (i, r) in signature.params.iter().enumerate() {
|
||||
let value = match r.purpose {
|
||||
let callee_args = signature
|
||||
.params
|
||||
.iter()
|
||||
.enumerate()
|
||||
.map(|(i, r)| {
|
||||
match r.purpose {
|
||||
// i - 1 because vmctx isn't passed through `values_vec`.
|
||||
ir::ArgumentPurpose::Normal => builder.ins().load(
|
||||
r.value_type,
|
||||
@@ -173,9 +176,9 @@ fn make_trampoline(
|
||||
),
|
||||
ir::ArgumentPurpose::VMContext => vmctx_ptr_val,
|
||||
other => panic!("unsupported argument purpose {}", other),
|
||||
};
|
||||
callee_args.push(value);
|
||||
}
|
||||
})
|
||||
.collect::<Vec<_>>();
|
||||
|
||||
let new_sig = builder.import_signature(signature.clone());
|
||||
|
||||
|
||||
@@ -87,11 +87,12 @@ impl<'data> RawCompiledModule<'data> {
|
||||
// Compute indices into the shared signature table.
|
||||
let signatures = {
|
||||
let signature_registry = compiler.signatures();
|
||||
let mut signatures = PrimaryMap::new();
|
||||
for sig in translation.module.signatures.values() {
|
||||
signatures.push(signature_registry.register(sig));
|
||||
}
|
||||
signatures
|
||||
translation
|
||||
.module
|
||||
.signatures
|
||||
.values()
|
||||
.map(|sig| signature_registry.register(sig))
|
||||
.collect::<PrimaryMap<_, _>>()
|
||||
};
|
||||
|
||||
// Make all code compiled thus far executable.
|
||||
|
||||
Reference in New Issue
Block a user