v8/test/mjsunit/asm/pointer-masking.js
bmeurer 35f6c0fdbf [turbofan] Optimize silent hole checks on legacy const context slots.
Currently we always generate a diamond in the graph builder for every
legacy const context slot, which we cannot get rid of until late control
reduction, even if we know after context specialization that the slot is
already initialized.

Now we generate a select instead, which the CommonOperatorReducer
happily removes during typed lowering. This greatly speeds up asm.js
code generated by Emscripten with the new POINTER_MASKING mode.

R=mstarzinger@chromium.org

Review URL: https://codereview.chromium.org/1072353002

Cr-Commit-Position: refs/heads/master@{#27739}
2015-04-10 10:28:12 +00:00

36 lines
861 B
JavaScript

// Copyright 2015 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
var stdlib = this;
var foreign = {};
var heap = new ArrayBuffer(64 * 1024);
var pm1 = (function(stdlib, foreign, heap) {
"use asm";
var HEAP8 = new stdlib.Int8Array(heap);
const MASK1 = 1023;
function load1(i) {
i = i|0;
var j = 0;
j = HEAP8[(i & MASK1)]|0;
return j|0;
}
function store1(i, j) {
i = i|0;
j = j|0;
HEAP8[(i & MASK1)] = j;
}
return {load1: load1, store1: store1};
})(stdlib, foreign, heap);
assertEquals(0, pm1.load1(0));
assertEquals(0, pm1.load1(1025));
pm1.store1(0, 1);
pm1.store1(1025, 127);
assertEquals(1, pm1.load1(0));
assertEquals(1, pm1.load1(1024));
assertEquals(127, pm1.load1(1));
assertEquals(127, pm1.load1(1025));