From a824194957e5a82f1c2cf19e8406f34625b1cd14 Mon Sep 17 00:00:00 2001 From: Michael Bebenita Date: Tue, 15 Mar 2016 14:33:18 -0700 Subject: Optimize function => index mapping. --- src/wasm-binary.h | 35 ++++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) (limited to 'src/wasm-binary.h') diff --git a/src/wasm-binary.h b/src/wasm-binary.h index 4b7e1a2a4..931e33af5 100644 --- a/src/wasm-binary.h +++ b/src/wasm-binary.h @@ -623,19 +623,36 @@ public: finishSection(start); } + std::map mappedImports; // name of the Import => index uint32_t getImportIndex(Name name) { - // TODO: optimize - for (size_t i = 0; i < wasm->imports.size(); i++) { - if (wasm->imports[i]->name == name) return i; + if (mappedImports.size()) { + assert(mappedImports.count(name)); + return mappedImports[name]; + } else { + // Create name => index mapping. + for (size_t i = 0; i < wasm->imports.size(); i++) { + assert(mappedImports.count(wasm->imports[i]->name) == 0); + mappedImports[wasm->imports[i]->name] = i; + } } - abort(); + assert(mappedImports.count(name)); + return mappedImports[name]; } + + std::map mappedFunctions; // name of the Function => index uint32_t getFunctionIndex(Name name) { - // TODO: optimize - for (size_t i = 0; i < wasm->functions.size(); i++) { - if (wasm->functions[i]->name == name) return i; - } - abort(); + if (mappedFunctions.size()) { + assert(mappedFunctions.count(name)); + return mappedFunctions[name]; + } else { + // Create name => index mapping. + for (size_t i = 0; i < wasm->functions.size(); i++) { + assert(mappedFunctions.count(wasm->functions[i]->name) == 0); + mappedFunctions[wasm->functions[i]->name] = i; + } + } + assert(mappedFunctions.count(name)); + return mappedFunctions[name]; } void writeFunctionTable() { -- cgit v1.2.3 From b4c0c719e14327df55a2b70f92475e89ce1e055e Mon Sep 17 00:00:00 2001 From: Michael Bebenita Date: Tue, 22 Mar 2016 16:58:31 -0700 Subject: Flip condition. --- src/wasm-binary.h | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) (limited to 'src/wasm-binary.h') diff --git a/src/wasm-binary.h b/src/wasm-binary.h index 931e33af5..0f404390b 100644 --- a/src/wasm-binary.h +++ b/src/wasm-binary.h @@ -625,10 +625,7 @@ public: std::map mappedImports; // name of the Import => index uint32_t getImportIndex(Name name) { - if (mappedImports.size()) { - assert(mappedImports.count(name)); - return mappedImports[name]; - } else { + if (!mappedImports.size()) { // Create name => index mapping. for (size_t i = 0; i < wasm->imports.size(); i++) { assert(mappedImports.count(wasm->imports[i]->name) == 0); @@ -641,10 +638,7 @@ public: std::map mappedFunctions; // name of the Function => index uint32_t getFunctionIndex(Name name) { - if (mappedFunctions.size()) { - assert(mappedFunctions.count(name)); - return mappedFunctions[name]; - } else { + if (!mappedFunctions.size()) { // Create name => index mapping. for (size_t i = 0; i < wasm->functions.size(); i++) { assert(mappedFunctions.count(wasm->functions[i]->name) == 0); -- cgit v1.2.3