5eb1aa488e
This reverts commit3913bde188
. Reason for revert: Reason for revert fixed. Original change's description: > Revert "[wasm] Rename TestingModule to TestingModuleBuilder." > > This reverts commited06fc9127
. > > Reason for revert: Need to revert previous CL > > Original change's description: > > [wasm] Rename TestingModule to TestingModuleBuilder. > > > > This is a followup to moving the ModuleEnv to the compiler directory and > > making it immutable. > > > > R=mtrofin@chromium.org, ahaas@chromium.org > > > > Bug: > > Change-Id: I0f5ec1b697bdcfad0b4dc2bca577cc0f40de8dc0 > > Reviewed-on: https://chromium-review.googlesource.com/616762 > > Commit-Queue: Ben Titzer <titzer@chromium.org> > > Reviewed-by: Mircea Trofin <mtrofin@chromium.org> > > Reviewed-by: Andreas Haas <ahaas@chromium.org> > > Cr-Commit-Position: refs/heads/master@{#47419} > > TBR=titzer@chromium.org,mtrofin@chromium.org,ahaas@chromium.org > > Change-Id: I9b3b379e89f523c2fcf205a1d268aa294bbc44ff > No-Presubmit: true > No-Tree-Checks: true > No-Try: true > Reviewed-on: https://chromium-review.googlesource.com/622567 > Reviewed-by: Michael Achenbach <machenbach@chromium.org> > Commit-Queue: Michael Achenbach <machenbach@chromium.org> > Cr-Commit-Position: refs/heads/master@{#47448} TBR=machenbach@chromium.org,titzer@chromium.org,mtrofin@chromium.org,ahaas@chromium.org Change-Id: Idce6f1ca8ed0ea80edb50292e9b6e2d7712f29cf No-Presubmit: true No-Tree-Checks: true No-Try: true Reviewed-on: https://chromium-review.googlesource.com/622034 Reviewed-by: Mircea Trofin <mtrofin@chromium.org> Commit-Queue: Mircea Trofin <mtrofin@chromium.org> Cr-Commit-Position: refs/heads/master@{#47454}
113 lines
3.6 KiB
C++
113 lines
3.6 KiB
C++
// Copyright 2017 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.
|
|
|
|
#include "test/cctest/cctest.h"
|
|
#include "test/cctest/compiler/value-helper.h"
|
|
#include "test/cctest/wasm/wasm-run-utils.h"
|
|
#include "test/common/wasm/wasm-macro-gen.h"
|
|
|
|
#define WASM_ATOMICS_OP(op) kAtomicPrefix, static_cast<byte>(op)
|
|
#define WASM_ATOMICS_BINOP(op, x, y) x, y, WASM_ATOMICS_OP(op)
|
|
|
|
typedef uint32_t (*Uint32BinOp)(uint32_t, uint32_t);
|
|
typedef uint16_t (*Uint16BinOp)(uint16_t, uint16_t);
|
|
typedef uint8_t (*Uint8BinOp)(uint8_t, uint8_t);
|
|
|
|
template <typename T>
|
|
T Add(T a, T b) {
|
|
return a + b;
|
|
}
|
|
|
|
template <typename T>
|
|
T Sub(T a, T b) {
|
|
return a - b;
|
|
}
|
|
|
|
template <typename T>
|
|
T And(T a, T b) {
|
|
return a & b;
|
|
}
|
|
|
|
template <typename T>
|
|
T Or(T a, T b) {
|
|
return a | b;
|
|
}
|
|
|
|
template <typename T>
|
|
T Xor(T a, T b) {
|
|
return a ^ b;
|
|
}
|
|
|
|
void RunU32BinOp(WasmOpcode wasm_op, Uint32BinOp expected_op) {
|
|
EXPERIMENTAL_FLAG_SCOPE(threads);
|
|
WasmRunner<uint32_t, uint32_t> r(kExecuteCompiled);
|
|
uint32_t* memory = r.builder().AddMemoryElems<uint32_t>(8);
|
|
|
|
BUILD(r, WASM_ATOMICS_BINOP(wasm_op, WASM_I32V_1(0), WASM_GET_LOCAL(0)));
|
|
|
|
FOR_UINT32_INPUTS(i) {
|
|
uint32_t initial = *i;
|
|
FOR_UINT32_INPUTS(j) {
|
|
r.builder().WriteMemory(&memory[0], initial);
|
|
CHECK_EQ(initial, r.Call(*j));
|
|
uint32_t expected = expected_op(*i, *j);
|
|
CHECK_EQ(expected, r.builder().ReadMemory(&memory[0]));
|
|
}
|
|
}
|
|
}
|
|
|
|
WASM_EXEC_TEST(I32Add) { RunU32BinOp(kExprI32AtomicAdd, Add); }
|
|
WASM_EXEC_TEST(I32Sub) { RunU32BinOp(kExprI32AtomicSub, Sub); }
|
|
WASM_EXEC_TEST(I32And) { RunU32BinOp(kExprI32AtomicAnd, And); }
|
|
WASM_EXEC_TEST(I32Or) { RunU32BinOp(kExprI32AtomicOr, Or); }
|
|
WASM_EXEC_TEST(I32Xor) { RunU32BinOp(kExprI32AtomicXor, Xor); }
|
|
|
|
void RunU16BinOp(WasmOpcode wasm_op, Uint16BinOp expected_op) {
|
|
EXPERIMENTAL_FLAG_SCOPE(threads);
|
|
WasmRunner<uint32_t, uint32_t> r(kExecuteCompiled);
|
|
uint16_t* memory = r.builder().AddMemoryElems<uint16_t>(8);
|
|
|
|
BUILD(r, WASM_ATOMICS_BINOP(wasm_op, WASM_I32V_1(0), WASM_GET_LOCAL(0)));
|
|
|
|
FOR_UINT16_INPUTS(i) {
|
|
uint16_t initial = *i;
|
|
FOR_UINT16_INPUTS(j) {
|
|
r.builder().WriteMemory(&memory[0], initial);
|
|
CHECK_EQ(initial, r.Call(*j));
|
|
uint16_t expected = expected_op(*i, *j);
|
|
CHECK_EQ(expected, r.builder().ReadMemory(&memory[0]));
|
|
}
|
|
}
|
|
}
|
|
|
|
WASM_EXEC_TEST(I32Add16U) { RunU16BinOp(kExprI32AtomicAdd16U, Add); }
|
|
WASM_EXEC_TEST(I32Sub16U) { RunU16BinOp(kExprI32AtomicSub16U, Sub); }
|
|
WASM_EXEC_TEST(I32And16U) { RunU16BinOp(kExprI32AtomicAnd16U, And); }
|
|
WASM_EXEC_TEST(I32Or16U) { RunU16BinOp(kExprI32AtomicOr16U, Or); }
|
|
WASM_EXEC_TEST(I32Xor16U) { RunU16BinOp(kExprI32AtomicXor16U, Xor); }
|
|
|
|
void RunU8BinOp(WasmOpcode wasm_op, Uint8BinOp expected_op) {
|
|
EXPERIMENTAL_FLAG_SCOPE(threads);
|
|
WasmRunner<uint32_t, uint32_t> r(kExecuteCompiled);
|
|
uint8_t* memory = r.builder().AddMemoryElems<uint8_t>(8);
|
|
|
|
BUILD(r, WASM_ATOMICS_BINOP(wasm_op, WASM_I32V_1(0), WASM_GET_LOCAL(0)));
|
|
|
|
FOR_UINT8_INPUTS(i) {
|
|
uint8_t initial = *i;
|
|
FOR_UINT8_INPUTS(j) {
|
|
r.builder().WriteMemory(&memory[0], initial);
|
|
CHECK_EQ(initial, r.Call(*j));
|
|
uint8_t expected = expected_op(*i, *j);
|
|
CHECK_EQ(expected, r.builder().ReadMemory(&memory[0]));
|
|
}
|
|
}
|
|
}
|
|
|
|
WASM_EXEC_TEST(I32Add8U) { RunU8BinOp(kExprI32AtomicAdd8U, Add); }
|
|
WASM_EXEC_TEST(I32Sub8U) { RunU8BinOp(kExprI32AtomicSub8U, Sub); }
|
|
WASM_EXEC_TEST(I32And8U) { RunU8BinOp(kExprI32AtomicAnd8U, And); }
|
|
WASM_EXEC_TEST(I32Or8U) { RunU8BinOp(kExprI32AtomicOr8U, Or); }
|
|
WASM_EXEC_TEST(I32Xor8U) { RunU8BinOp(kExprI32AtomicXor8U, Xor); }
|