# Copyright 2016 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.

[
[ALWAYS, {
  'skip-stack-guard-page': [PASS, ['((arch == ppc or arch == ppc64 or arch == s390 or arch == s390x) and simulator_run)', SKIP]],
  # TODO(v8:10994): Failing spec test after update.
  'proposals/simd/imports': [FAIL],
  'proposals/simd/data': [FAIL],
  'proposals/js-types/data': [FAIL],

  # TODO(v8:9144): The MVP behavior when bounds-checking segments changed in
  # the bulk-memory proposal. Since we've enabled bulk-memory by default, we
  # need to update to use its testsuite.
  'linking': [FAIL],
  'elem': [FAIL],
  'data': [FAIL],

  # TODO(wasm): Roll newest tests into "js-types" repository.
  'proposals/js-types/elem': [FAIL],
  'proposals/js-types/globals': [FAIL],
  'proposals/js-types/imports': [FAIL],
  'proposals/js-types/linking': [FAIL],

  # TODO(wasm): Roll newest tests into "tail-call" repository.
  'proposals/tail-call/data': [FAIL],
  'proposals/tail-call/elem': [FAIL],
  'proposals/tail-call/exports': [FAIL],
  'proposals/tail-call/func': [FAIL],
  'proposals/tail-call/globals': [FAIL],
  'proposals/tail-call/imports': [FAIL],
  'proposals/tail-call/linking': [FAIL],
  'proposals/tail-call/type': [FAIL],
  'proposals/tail-call/unreached-invalid': [FAIL],

  # This test requires the reftypes flag to be disabled.
  'proposals/bulk-memory-operations/imports': [FAIL],

  # TODO(v8:11401): Fix memory64 spec tests / the v8 implementation (whatever
  # is broken).
  'proposals/memory64/address64': [FAIL],
  'proposals/memory64/data': [FAIL],
  'proposals/memory64/elem': [FAIL],
  'proposals/memory64/float_memory64': [FAIL],
  'proposals/memory64/imports': [FAIL],
  'proposals/memory64/load64': [FAIL],
  'proposals/memory64/memory64': [FAIL],
  'proposals/memory64/memory_grow64': [FAIL],
  'proposals/memory64/memory_trap64': [FAIL],
}],  # ALWAYS

['arch == arm and not simulator_run', {
  # See https://crbug.com/v8/10938 denormals not handled correctly on ARM.
  'proposals/simd/simd_f32x4': [PASS, FAIL],
  'proposals/simd/simd_f32x4_arith': [PASS, FAIL],
  'proposals/simd/simd_f32x4_cmp': [PASS, FAIL],
  # This test only has 1 problematic use of f32x4.min and f32x4.div, consider
  # removing it from upstream, then we can run this test.
  'proposals/simd/simd_splat' : [PASS, FAIL],
  'proposals/simd/simd_f32x4_pmin_pmax' : [PASS, FAIL],
}],  # arch == arm and not simulator_run

['arch == mipsel or arch == mips64el or arch == mips or arch == mips64', {
  # These tests fail because mips does not support the correct NaN bit patterns.
  'float_misc': [SKIP],
  'float_exprs': [SKIP],
  'f32': [SKIP],
  'f64': [SKIP],
  'f32_bitwise': [SKIP],
  'f64_bitwise': [SKIP],
  'proposals/reference-types/conversions':  [SKIP],
  'proposals/bulk-memory-operations/conversions': [SKIP],
  'proposals/js-types/f32': [SKIP],
  'proposals/js-types/f64': [SKIP],
  'proposals/js-types/f32_bitwise': [SKIP],
  'proposals/js-types/f64_bitwise': [SKIP],
  'proposals/js-types/float_exprs': [SKIP],
  'proposals/js-types/float_misc': [SKIP],
  'proposals/js-types/conversions': [SKIP],
  'proposals/bulk-memory-operations/f32': [SKIP],
  'proposals/bulk-memory-operations/f64': [SKIP],
  'proposals/reference-types/f32': [SKIP],
  'proposals/reference-types/f64': [SKIP],
  'proposals/bulk-memory-operations/float_misc': [SKIP],
  'proposals/reference-types/float_misc': [SKIP],
  'proposals/tail-call/f32': [SKIP],
  'proposals/tail-call/f32_bitwise': [SKIP],
  'proposals/tail-call/f64': [SKIP],
  'proposals/tail-call/f64_bitwise': [SKIP],
  'proposals/tail-call/float_exprs': [SKIP],
  'proposals/tail-call/float_misc': [SKIP],
  'proposals/tail-call/conversions': [SKIP],
}],  # 'arch == mipsel or arch == mips64el or arch == mips or arch == mips64'

['(arch == mipsel or arch == mips64el or arch == mips or arch == mips64) and not simulator_run', {
  # This test fail because mips does not support the correct NaN bit patterns.
  # But it doesn't fail in simulator.
  'conversions': [SKIP],
}],  # '(arch == mipsel or arch == mips64el or arch == mips or arch == mips64) and not simulator_run'

['(arch == mipsel or arch == mips64el) and simulator_run', {
  # These tests need larger stack size on simulator.
  'skip-stack-guard-page': '--sim-stack-size=8192',
  'proposals/tail-call/skip-stack-guard-page': '--sim-stack-size=8192',
}],  # '(arch == mipsel or arch == mips64el) and simulator_run'

['arch == riscv64', {
  'conversions': [SKIP],
  'proposals/JS-BigInt-integration/conversions': [SKIP],
  'proposals/bulk-memory-operations/conversions': [SKIP],
  'proposals/js-types/conversions': [SKIP],
  'proposals/multi-value/conversions': [SKIP],
  'proposals/reference-types/conversions': [SKIP],

  'f32': [SKIP],
  'f64': [SKIP],
  'proposals/multi-value/f64': [SKIP],
  'proposals/JS-BigInt-integration/f64': [SKIP],
  'proposals/JS-BigInt-integration/f32': [SKIP],
  'proposals/bulk-memory-operations/f32': [SKIP],
  'proposals/bulk-memory-operations/f64': [SKIP],
  'proposals/js-types/f32': [SKIP],
  'proposals/js-types/f64': [SKIP],
  'proposals/multi-value/f32': [SKIP],
  'proposals/reference-types/f32': [SKIP],
  'proposals/reference-types/f64': [SKIP],

   # the following all fail w/ symptons captured in issue #166
   'float_exprs': [SKIP],
   'proposals/tail-call/conversions': [SKIP],
   'proposals/tail-call/float_exprs': [SKIP],
   'proposals/tail-call/f64': [SKIP],
   'proposals/tail-call/f32': [SKIP],

   # These tests need larger stack size on simulator.
   'skip-stack-guard-page': '--sim-stack-size=8192',
   'proposals/tail-call/skip-stack-guard-page': '--sim-stack-size=8192',

   # SIMD is not fully implemented yet.
   'proposals/simd/*': [SKIP],

   # See issue #403
   'proposals/js-types/exports': [SKIP],
   'proposals/js-types/imports': [SKIP],

   # riscv64 don't implemented some wasm atomic func
   'left-to-right': [SKIP],
   'float_misc': [SKIP],
   'f64_bitwise': [SKIP],
   'f32_bitwise': [SKIP],
   'proposals/tail-call/f32_bitwise': [SKIP],
   'proposals/tail-call/f64_bitwise': [SKIP],
   'proposals/tail-call/float_misc': [SKIP],
   'proposals/tail-call/left-to-right': [SKIP],

}],  # 'arch == riscv64

['arch == ppc or arch == ppc64', {
  # These tests fail because ppc float min and max doesn't convert sNaN to qNaN.
  'f32': [SKIP],
  'f64': [SKIP],
  'proposals/js-types/f32': [SKIP],
  'proposals/js-types/f64': [SKIP],
  'proposals/bulk-memory-operations/f32': [SKIP],
  'proposals/bulk-memory-operations/f64': [SKIP],
  'proposals/reference-types/f32': [SKIP],
  'proposals/reference-types/f64': [SKIP],
  'proposals/tail-call/f32': [SKIP],
  'proposals/tail-call/f64': [SKIP],
  # This test fails because ppc float to double doesn't convert sNaN to qNaN.
  'conversions': [SKIP],
  'proposals/js-types/conversions': [SKIP],
  'proposals/bulk-memory-operations/conversions': [SKIP],
  'proposals/reference-types/conversions':  [SKIP],
  'proposals/tail-call/conversions':  [SKIP],
}],  # 'arch == ppc or arch == ppc64'

['arch == s390 or arch == s390x', {
  # These tests fail because s390 float min and max doesn't convert sNaN to qNaN.
  'f32': [SKIP],
  'f64': [SKIP],
  'proposals/js-types/f32': [SKIP],
  'proposals/js-types/f64': [SKIP],
  'proposals/bulk-memory-operations/f32': [SKIP],
  'proposals/bulk-memory-operations/f64': [SKIP],
  'proposals/reference-types/f32': [SKIP],
  'proposals/reference-types/f64': [SKIP],
  'proposals/tail-call/f32': [SKIP],
  'proposals/tail-call/f64': [SKIP],
}],  # 'arch == s390 or arch == s390x'

##############################################################################
# TODO(v8:7777): Change this once wasm is supported in jitless mode.
['not has_webassembly or variant == jitless', {
  '*': [SKIP],
}],  # not has_webassembly or variant == jitless

################################################################################
['variant == stress_snapshot', {
  '*': [SKIP],  # only relevant for mjsunit tests.
}],

##############################################################################
['no_simd_sse == True', {
  'proposals/simd/*': [SKIP],
}],  # no_simd_sse == True

]