tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

simple_example.js (1400B)


      1 // Branch Hinting proposal
      2 
      3 function runModule(hint) {
      4    let code =`
      5    (module
      6        (func $$dummy)
      7        (func $main (param i32) (result i32)
      8            i32.const 0
      9            local.get 0
     10            i32.eq
     11            ;; Only allowed on br_if and if
     12            (@metadata.code.branch_hint "${hint}") if
     13                call $$dummy
     14                i32.const 1
     15                return
     16            else
     17                call $$dummy
     18                i32.const 0
     19                return
     20            end
     21            i32.const 3
     22            return
     23        )
     24        (export "_main" (func $main))
     25    )`;
     26    let branchHintsModule = new WebAssembly.Module(wasmTextToBinary(code));
     27    assertEq(wasmParsedBranchHints(branchHintsModule), true);
     28 
     29    let instance = new WebAssembly.Instance(branchHintsModule);
     30    assertEq(instance.exports._main(0), 1);
     31 }
     32 
     33 // Ensure that we have the same result with different branch hints.
     34 runModule("\\00");
     35 runModule("\\01");
     36 
     37 let module = new WebAssembly.Module(wasmTextToBinary(`
     38  (func i32.const 0 (@metadata.code.branch_hint "\\00") if end)
     39 `))
     40 
     41 assertEq(wasmParsedBranchHints(module), true);
     42 
     43 let deadCode = new WebAssembly.Module(wasmTextToBinary(`
     44 (module
     45    (func $main
     46      i32.const 0
     47      return
     48      (@metadata.code.branch_hint "\\00") if
     49      end
     50    )
     51    (export "_main" (func $main))
     52 )`));
     53 
     54 assertEq(wasmParsedBranchHints(deadCode), true);