From 6ded83332f458477ba38ba56c799ec99aed8aa38 Mon Sep 17 00:00:00 2001 From: Dan Gohman Date: Tue, 3 Oct 2017 14:02:41 -0700 Subject: [PATCH] Change the reloc sink to use vectors instead of hash maps. --- lib/wasm2obj/src/emit_module.rs | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/lib/wasm2obj/src/emit_module.rs b/lib/wasm2obj/src/emit_module.rs index 9e4ec1da92..1caf3d269a 100644 --- a/lib/wasm2obj/src/emit_module.rs +++ b/lib/wasm2obj/src/emit_module.rs @@ -9,7 +9,6 @@ use cretonne::ir::entities::AnyEntity; use cretonne::ir::{self, Ebb, FuncRef, JumpTable, Function}; use cretonne::binemit::{RelocSink, Reloc, CodeOffset}; use cton_wasm::TranslationResult; -use std::collections::HashMap; use std::fmt::Write; use faerie::Artifact; use wasmstandalone; @@ -18,29 +17,29 @@ type RelocRef = u16; // Implementation of a relocation sink that just saves all the information for later struct FaerieRelocSink { - ebbs: HashMap, - funcs: HashMap, - jts: HashMap, + ebbs: Vec<(RelocRef, Ebb, CodeOffset)>, + funcs: Vec<(RelocRef, FuncRef, CodeOffset)>, + jts: Vec<(RelocRef, JumpTable, CodeOffset)>, } impl RelocSink for FaerieRelocSink { fn reloc_ebb(&mut self, offset: CodeOffset, reloc: Reloc, ebb: Ebb) { - self.ebbs.insert(reloc.0, (ebb, offset)); + self.ebbs.push((reloc.0, ebb, offset)); } fn reloc_func(&mut self, offset: CodeOffset, reloc: Reloc, func: FuncRef) { - self.funcs.insert(reloc.0, (func, offset)); + self.funcs.push((reloc.0, func, offset)); } fn reloc_jt(&mut self, offset: CodeOffset, reloc: Reloc, jt: JumpTable) { - self.jts.insert(reloc.0, (jt, offset)); + self.jts.push((reloc.0, jt, offset)); } } impl FaerieRelocSink { fn new() -> FaerieRelocSink { FaerieRelocSink { - ebbs: HashMap::new(), - funcs: HashMap::new(), - jts: HashMap::new(), + ebbs: Vec::new(), + funcs: Vec::new(), + jts: Vec::new(), } } }