From 1c0b83d6ed3a5ad0d6e3aff604c4bb23d71c3242 Mon Sep 17 00:00:00 2001 From: HyukWoo Park Date: Thu, 27 Jun 2024 20:09:16 +0900 Subject: [PATCH] Add TC for extended features Signed-off-by: HyukWoo Park --- .github/workflows/actions.yml | 20 ++++++++++++++++ .../wabt/src/walrus/binary-reader-walrus.cc | 24 +++++++------------ tools/run-tests.py | 17 +++++++++++++ 3 files changed, 45 insertions(+), 16 deletions(-) diff --git a/.github/workflows/actions.yml b/.github/workflows/actions.yml index 7dadd8b2b..5e9e7b4ef 100644 --- a/.github/workflows/actions.yml +++ b/.github/workflows/actions.yml @@ -252,6 +252,26 @@ jobs: uses: mxschmitt/action-tmate@v3 timeout-minutes: 15 + build-test-extended-feature: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + submodules: true + - name: Install Packages + run: | + sudo apt update + sudo apt install -y ninja-build gcc-multilib g++-multilib + - name: Build x64 + env: + BUILD_OPTIONS: -DWALRUS_ARCH=x64 -DWALRUS_HOST=linux -DWALRUS_MODE=debug -DWALRUS_OUTPUT=shell -DWALRUS_EXTENDED_FEATURES=ON -GNinja + run: | + cmake -H. -Bout/extended $BUILD_OPTIONS + ninja -Cout/extended + - name: Run Tests + run: | + $RUNNER --engine="$GITHUB_WORKSPACE/out/extended/walrus" wasm-test-extended + build-test-performance: runs-on: ubuntu-latest steps: diff --git a/third_party/wabt/src/walrus/binary-reader-walrus.cc b/third_party/wabt/src/walrus/binary-reader-walrus.cc index f70b7441b..e6156ebbd 100644 --- a/third_party/wabt/src/walrus/binary-reader-walrus.cc +++ b/third_party/wabt/src/walrus/binary-reader-walrus.cc @@ -79,8 +79,7 @@ struct Label { LabelKind kind; }; -static Features getFeatures() -{ +static Features getFeatures() { Features features; features.enable_exceptions(); // TODO: should use command line flag for this (--enable-threads) @@ -473,47 +472,40 @@ class BinaryReaderDelegateWalrus: public BinaryReaderDelegate { Result OnOpcodeV128(v128 value) override { return Result::Ok; } - Result OnOpcodeBlockSig(Type sig_type) override - { + Result OnOpcodeBlockSig(Type sig_type) override { if (WABT_UNLIKELY(m_externalDelegate->resumeGenerateByteCodeAfterNBlockEnd())) { m_externalDelegate->setResumeGenerateByteCodeAfterNBlockEnd(m_externalDelegate->resumeGenerateByteCodeAfterNBlockEnd() + 1); } return Result::Ok; } - Result OnOpcodeType(Type type) override - { + Result OnOpcodeType(Type type) override { return Result::Ok; } - Result OnAtomicLoadExpr(Opcode opcode, Index memidx, Address alignment_log2, Address offset) override - { + Result OnAtomicLoadExpr(Opcode opcode, Index memidx, Address alignment_log2, Address offset) override { CHECK_RESULT(m_validator.OnAtomicLoad(GetLocation(), opcode, Var(memidx, GetLocation()), GetAlignment(alignment_log2), offset)); SHOULD_GENERATE_BYTECODE; m_externalDelegate->OnAtomicLoadExpr(opcode, memidx, alignment_log2, offset); return Result::Ok; } - Result OnAtomicStoreExpr(Opcode opcode, Index memidx, Address alignment_log2, Address offset) override - { + Result OnAtomicStoreExpr(Opcode opcode, Index memidx, Address alignment_log2, Address offset) override { CHECK_RESULT(m_validator.OnAtomicStore(GetLocation(), opcode, Var(memidx, GetLocation()), GetAlignment(alignment_log2), offset)); SHOULD_GENERATE_BYTECODE; m_externalDelegate->OnAtomicStoreExpr(opcode, memidx, alignment_log2, offset); return Result::Ok; } - Result OnAtomicRmwExpr(Opcode opcode, Index memidx, Address alignment_log2, Address offset) override - { + Result OnAtomicRmwExpr(Opcode opcode, Index memidx, Address alignment_log2, Address offset) override { CHECK_RESULT(m_validator.OnAtomicRmw(GetLocation(), opcode, Var(memidx, GetLocation()), GetAlignment(alignment_log2), offset)); SHOULD_GENERATE_BYTECODE; m_externalDelegate->OnAtomicRmwExpr(opcode, memidx, alignment_log2, offset); return Result::Ok; } - Result OnAtomicRmwCmpxchgExpr(Opcode opcode, Index memidx, Address alignment_log2, Address offset) override - { + Result OnAtomicRmwCmpxchgExpr(Opcode opcode, Index memidx, Address alignment_log2, Address offset) override { CHECK_RESULT(m_validator.OnAtomicRmwCmpxchg(GetLocation(), opcode, Var(memidx, GetLocation()), GetAlignment(alignment_log2), offset)); SHOULD_GENERATE_BYTECODE; m_externalDelegate->OnAtomicCmpxchgExpr(opcode, memidx, alignment_log2, offset); return Result::Ok; } - Result OnAtomicWaitExpr(Opcode opcode, Index memidx, Address align_log2, Address offset) override - { + Result OnAtomicWaitExpr(Opcode opcode, Index memidx, Address align_log2, Address offset) override { CHECK_RESULT(m_validator.OnAtomicWait(GetLocation(), opcode, Var(memidx, GetLocation()), GetAlignment(align_log2), offset)); abort(); return Result::Ok; diff --git a/tools/run-tests.py b/tools/run-tests.py index 914c15205..00767f94f 100755 --- a/tools/run-tests.py +++ b/tools/run-tests.py @@ -154,6 +154,23 @@ def run_jit_tests(engine): if fail_total > 0: raise Exception("basic wasm-test-core failed") +@runner('wasm-test-extended', default=False) +def run_extended_tests(engine): + TEST_DIR = join(PROJECT_SOURCE_DIR, 'test', 'extended') + + print('Running wasm-extended tests:') + xpass = glob(join(TEST_DIR, '**/*.wast'), recursive=True) + xpass_result = _run_wast_tests(engine, xpass, False) + + tests_total = len(xpass) + fail_total = xpass_result + print('TOTAL: %d' % (tests_total)) + print('%sPASS : %d%s' % (COLOR_GREEN, tests_total - fail_total, COLOR_RESET)) + print('%sFAIL : %d%s' % (COLOR_RED, fail_total, COLOR_RESET)) + + if fail_total > 0: + raise Exception("wasm-test-extended failed") + def main(): parser = ArgumentParser(description='Walrus Test Suite Runner') parser.add_argument('--engine', metavar='PATH', default=DEFAULT_WALRUS,