56b8ab5d07
On ia32, we were pinning too many registers, resulting in no unpinned byte registers left (we only have three byte registers since {ebx} is reserved for the root register). It turns out that on most paths, we don't actually need to pin any registers, since {Store} is often the last call for an operation (like any store or set_global). If registers need to be pinned, only pass those that must be kept alive across the {Store}. This allows to compute a more narrow set of pinned registers on demand inside {Store}. Plus minor drive-by changes. R=titzer@chromium.org Bug: chromium:894374, chromium:894307, v8:6600 Change-Id: Ic4d7131784c193dc7a2abf0e504d9973f6d5c5f1 Reviewed-on: https://chromium-review.googlesource.com/c/1275819 Commit-Queue: Clemens Hammacher <clemensh@chromium.org> Reviewed-by: Ben Titzer <titzer@chromium.org> Cr-Commit-Position: refs/heads/master@{#56587}
21 lines
650 B
JavaScript
21 lines
650 B
JavaScript
// Copyright 2018 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.
|
|
|
|
load('test/mjsunit/wasm/wasm-constants.js');
|
|
load('test/mjsunit/wasm/wasm-module-builder.js');
|
|
|
|
const builder = new WasmModuleBuilder();
|
|
builder.addMemory(16, 32, false);
|
|
const sig = makeSig([kWasmI32, kWasmI32, kWasmI32], [kWasmI32]);
|
|
builder.addFunction(undefined, sig)
|
|
.addBodyWithEnd([
|
|
kExprMemorySize, 0,
|
|
kExprI32Const, 0,
|
|
kExprI64Const, 0,
|
|
kExprI64StoreMem8, 0, 0,
|
|
kExprEnd,
|
|
]);
|
|
builder.addExport('main', 0);
|
|
builder.instantiate(); // shouldn't crash
|